4 ms·
As the very last line mentions, "use UTC" and avoid silly DST issues like this.
by flabbergasted 5y ago
As the very last line mentions, "use UTC" and avoid silly DST issues like this.
- tshaddox 5y agoAnd probably don't schedule anything for the last few seconds of a calendar year.
- janiscaune69 5y agoEnd of year is fine, it is around start of day / end of day when DST switches that screws up things
- tshaddox 5y agoI was referring to leap seconds, which are applied at the end of the calendar in UTC, and are the only cases where UTC is not a continuous and predictable time scale. A scheduling system like cron still needs to have some mechanism to handle events that are scheduled in UTC, because particular UTC seconds can be skipped over. (And FYI, this can actually happen in other parts of the calendar year, not just the end.)
- mdavidn 5y agoA leap second would be a change "less than 3 hours," so the job should still run according to the cited Debian man page. Google's NTP servers smear leap seconds over an entire day, so UTC may appear continuous despite leap seconds. https://developers.google.com/time/smear https://developers.google.com/time/smear
- tshaddox 5y agoIndeed. I only meant that simply switching to UTC doesn't actually reduce the necessity for the complex handling of scheduled events this article describes. It would just make these cases occur less frequently.
- midasuni 5y agoMy shop opens when the local clock tower says 9 am I want a cronjob set up to change the “closed” sigh to say “open”. How do I set that with UTC?
- noja 5y agoOpen your shop at 0900 UTC
- PetahNZ 5y agoSet the cron job to run every hour in UTC, and your application logic checks if its time to open in the configured time zone.
- kymaz 5y agoSo the fix to using UTC for computers and crons that only care about the local time zone is to reimplement time checking? If youre just gonna run it every hour, you might as well while(1){ check time; do stuff; sleep 1 hour;} now there's one less dependency?
- dbaupp 5y agoUnfortunately there’s more … interesting time zones than UTC+/-xx:00, and more interesting transitions than moving an hour. For instance, Nepal uses UTC+05:45, and the time shifted by 15 minutes in 1986 (from UTC+05:30): https://www.timeanddate.com/time/zone/nepal/kathmandu https://www.timeanddate.com/time/zone/nepal/kathmandu That said, I think running every 15 minutes handles all currently-observed time zones.
- dbrueck 5y agoWould that it were so simple! For cronjobs, maybe it often is, but DST transitions are a mess to deal with in things like calendaring UIs and other places where you have to convert point-in-time values to the format consumed by normal people, and where your users can have different but legitimate expectations about how those transitions should be handled. At one company I remember helping build a scheduling UI for a linear TV broadcast channel, where you plan out the broadcast day in 24h blocks. Worked great except twice a year when, due to DST, you have either a 23h day or a 25h day, and half a dozen ways various customers expected that to be handled. The de facto solution was to have happy customers 363 days a year. :-/ Hey, but thank goodness for https://en.wikipedia.org/wiki/Uniform_Time_Act https://en.wikipedia.org/wiki/Uniform_Time_Act or it would have been even worse!
- mason55 5y agoA better answer is to use time+locale for things that are supposed to happen in the future and UTC for things that happened in the past. The reason is that things that happened in the past will have a specific moment on the arrow of time at which they happened, and UTC is as good as anything else for putting a consistent label on the arrow of time. But, for things that are going to happen in the future, you have no way of knowing if two "time labels" that right now point to the same moment on the arrow of time might have some change that causes them to point to different moments. In this case UTC removes the ambiguity about the timezone that the time is in, but it adds ambiguity about which moment in time you're really talking about. Let's say you want to schedule something for 9pm local time (UTC-3). So you schedule it for midnight UTC. Then your timezone shifts to UTC-2 and your appointment moves to 10pm. That's likely not at all what you intended. It's also why you need to pick a "master" timezone when you're sending invites to multiple timezones and let the rest of the times be derived from the "single source of truth" time.
- stefan_ 5y agoThis heuristic obviously doesn't work. I build a factory in a strategy game. It is going to take 10h. The timezone shifts; should it take longer, shorter, the same? Obviously the same. You still need to use your brain and careful UI design. Things that a user scheduled to happen at a specific local time need to store the relevant timezone, implicitly or explicitly.