I think it's very hard to build an RTC using delays. While it is easy to create precise delays, you have to factor in the code that calls the delays. In addition, you will have different execution paths depending on program logic and it becomes very difficult to take into account every cycle. Even an instruction or two off starts to add up.
It's much better to use timers to make the time measured independent of the code execution path. Care needs to be taken to ensure that no clock cycles are lost.