Most projects get by with one clock, so you might explain why you need this to be so complicated. If your needs are valid, you are probably still going about it the wrong way, and I bet you also have the wrong clock.
Many projects use the Time library. The point of the Time library is track time using epoch time
which is really the best way to track time as it makes doing many other things much easier.
The Time library integrates with several other libraries like TimeAlarms and TimeZone for additional
The value of epoch time is it gives you a universal timestamp that is totally independent of
If all that is ever needed is to display a local time in human readable form and things like
timestamps, or alarms, or other time offset type calculations are not needed, then epoch time and hence
the Time library is probably not necessary.
Just set the RTC to localtime and read it whenever you need the date/time.
The Time library tracks time the same way unix does, it tracks time based on the number of seconds
since midnight Jan 1970 UTC.
When using this type of epoch time, the timestamp (time_t values) makes calculating
time deltas as easy as simple addition or subtraction. Such is not the case when using
human readable time formats - which is how the RTCs track time.
Just think of how to calculate something as easy as 1 minute from now.
With epoch time you take the epoch time of "now" and simply add 60.
With human readable time, you have do all kinds of checks for roll overs of
minutes, hours, years, months, years, and even leap year stuff comes into play.
With epoch time everything is seconds until you need it to be human readable and
then it gets converted.
Once the time in the Time library set, the Time library uses the millis() clock to track time.
In order to have better accuracy than the AVR clock,
the epoch time down in the Time library will need to be periodically synchronized to something more accurate.
The Time library has the ability to configure a routine for synchronization and how often call it
using setSyncProvider() and setSyncInterval()
The library includes examples for how to use it.
Depending on the accuracy of your AVR clock, syncing the time at midnight might
still allow quite a bit of drift.
Rather than syncing at a specific time, it might better to sync it periodically using
the sync provider functions in the Time library. Sync it every so many minutes
5, 10, 60, 120, etc... whatever you think provides the needed accuracy.
As rob mentioned some RTCs drift more than others,
The DS3231 is one of the better ones as it is temperature compensated.