From time to time the question has come up here about using NTP or GPS to keep an RTC in accurate time since they vary a lot in timekeeping accuracy. I was hoping that if you could get an RTC to keep time well enough, you might be able to avoid resetting it for a year or more.
The DS3231 is pretty good, with automatic temperature adjustment. And it has the Aging register that lets you adjust the oscillator frequency down to something like 0.1ppm, which is like 3 seconds per year. So I developed a system which adjusts Aging so the RTC's 1Hz squarewave output is the same as the pulse-per-second output of a GPS module, and does that pretty quickly. The PPS signal from GPS is as close to perfect time as we can get.
So the idea is that you would do a one-time calibration on each RTC to near-perfect time, and that setting would remain for as long as the coin cell on the module is there. It's still uncertain how well the temperature adjustment works, but you could conceivably go a few years without having to reset the RTC. The default Aging setting is zero, but on my three examples I've found that the optimum settings were +5, -23 and -45.
Any Arduino running an ATmega328P will work (Uno, Nano, Pro Mini), and any GPS module with a PPS output - generally the 5-pin versions. I got one on Amazon for $13.
I've put the sketch and everything on Github, complete with a PDF that explains it all:
https://github.com/gbhug5a/DS3231-Aging-GPS
I hope this will be of use to data loggers and such.