I think the best approach is to store all timestamp data in UTC format. When you read it, immediately convert to UTC; Right before displaying, convert from UTC to your local time zone.
You might even want your code to print all timestamps twice, once local time and a second time in UTC time ... it depends on how much data you need to fit on the screen at the same time.
I am a big fan of the RFC 3339 date format. It is unambiguous for both people and cars. What is best is that almost nothing is optional, so it always looks the same:
2013-01-29T19:46:00.00-08:00
I prefer to convert timestamps to single float values for storage and calculations, and then convert back to date and time format for display. I will not keep money in floats, but timestamp values are within the accuracy of float values!
Working with temporary floats greatly simplifies the code:
if time_now() >= last_time + interval: print("interval has elapsed")
It looks like you are already doing this to a large extent, so I cannot offer any significant improvements.
I wrote some library functions to parse timestamps in Python swim time values and convert the floating point time values back to timestamp strings. Maybe something here will be useful for you:
http://home.blarg.net/~steveha/pyfeed.html
I suggest you look at feed.date.rfc3339 . BSD, so you can just use the code if you want.
EDIT: Question: How does this help in time zones?
Answer. If each timestamp that you store is stored in UTC as a value for the Python swim time (the number of seconds since an era with an additional fractional part), you can directly compare them; subtract one from the other to find out the interval between them; etc. If you use RFC 3339 timestamps, then each timestamp line has a time zone right in the timestamp line, and your code can be correctly converted to UTC. If you convert the float value to the timestamp string value right before the display, the time zone will be correct for local time.
In addition, as I said, it looks like he is already doing quite a lot, so I don’t think I can give any surprising advice.