Digital Clock --->Bad Accuracy (Help to Troubleshooting)
You should really use (timer) interrupt driven firmware to ensure your clock ticks accurately. Software delays will cause a gradual drift because of variations in your program flow. Here is a good overview of how to use Timers on the Arduino platform. You can follow something like the pattern described in the section on "Blinking LED with timer overflow interrupt". The Arduino's 16MHz crystal is plenty accurate for a toy clock project if you write the software correctly. 

This style of writing software is "event-driven," so you have to get your mind around that first. The hardware tells you something happened (in this case a second has passed) and your software reacts to it. Instead of you telling your software to "wait a second" and then doing something.