Keeping accurate time

Without an external precision clock your Arduino time measurement will only be as accurate as the processor clock. Perhaps a high-precision 16MHz crystal instead of the standard one would help.

It looks like 10ppm (parts per million) is the best you can get off the shelf. That's a little better than a second a day accuracy. You can get such crystals for under $1. Search Google Shopping for "16 MHz crystal 10ppm".