On 3/5/21 2:15 PM, Bruce Labitt wrote: > > On 3/4/21 10:51 PM, Joshua Judson Rosen wrote: > > > > See also: "The Problem with Time and Timezones" > > <https://www.youtube.com/watch?v=-5wpm-gesOY> > > > > 😣 > > That was somewhat comical. Yeah, been trying to keep everything with > respect to UTC. It can be a little difficult at times, as it's easy to > goof up and fall in to quite a few time trap holes.
See also: http://falsehoodsabouttime.com/ http://www.creativedeletion.com/2015/01/28/falsehoods-programmers-date-time-zones.html > One of the more difficult things has been indexing into the time array. > I've been using numpy's timedate64 and timedelta64 but occasionally > still get tripped up. Handling time is complicated. Fortunately, all > that I care about for this project is relative time. Start time, end > time and time is "linear" in between. According to the the youtuber, > even that's not guaranteed if one spans the new year and we need a leap > second! Indeed! Though I fear that the reality is actually worse than the impression you got.... A lot of the `if this happens and also' conditions are actually `if _either_ this _or_ that'. e.g.: most days have 86400 seconds, but...: * some have 86401 (+ leap seconds) * some have 86399 (- leap seconds--significantly rarer: hasn't happened _yet_, but...) * some have 82800 (i.e. "some days only have 23 hours", normal spring-forward DST shift) * some have 90000 (i.e. "some days have 25 hours", normal fall-backward DST shift) * conceivably some may even have 90001 or 89999 (Really! RE: negative leap seconds, `there is a first time for everything': <https://www.livescience.com/earth-spinning-faster-negative-leap-second.html>) And yeah..., even if you're using unix time (seconds since the epoch)..., unix time specifically does _not_ count leap seconds..., which is both wonderful and terrible.... Quoting the time(2) man page I have here: This value is not the same as the actual number of seconds between the time and the Epoch, because of leap seconds and because system clocks are not required to be synchronized to a standard reference. The intention is that the interpretation of seconds since the Epoch values be consistent; see POSIX.1-2008 Rationale A.4.15 for further rationale. Wikipedia has some text on this, as well <https://en.wikipedia.org/wiki/Unix_time#Leap_seconds>: When a leap second occurs, the UTC day is not exactly 86400 seconds long and the Unix time number (which always increases by exactly 86400 each day) experiences a discontinuity. Leap seconds may be positive or negative. No negative leap second has ever been declared, but if one were to be, then at the end of a day with a negative leap second, the Unix time number would jump up by 1 to the start of the next day. During a positive leap second at the end of a day, which occurs about every year and a half on average, the Unix time number increases continuously into the next day during the leap second and then at the end of the leap second jumps back by 1 (returning to the start of the next day). "all I have to care about is relative time" _should_ make your life easier..., in theory..., _assuming_ that the timestamps that you get and need to diff _really are_ on a linear timescale. Good luck. I actually would love to hear about whatever linear timescale you end up settling on. This is why astronomers are using `Julian years'.... Oh! ALSO: I think you may have mentioned previously that you're also reading these files from a FAT-formatted SD card or something..., which is, itself, multiple additional sources of confusion: * FAT can only store timestamps down to *2-second* resolution, which means that all file-timestamps get rounded to the nearest *even second*. * FAT doesn't store timestamps on an _absolute_ timescale, it only stores them (in `broken-down time') _relative to a given instantaneous timezone_. * FAT doesn't actually give the timezone. Sooooo..., when you for example load a FAT-formatted SD card into a Linux computer, and the vfat driver in Linux needs to convert those `broken-down timestamps relative to an unspecified instantaneous timezone' into `absolute seconds since the epoch', IIRC it basically assumes that _Linux's current instantaneous system timezone offset_ is appropriate for interpreting the broken-down time stamps in the FAT filesystem. If you are on the opposite side of a DST transition from when the files were stamped (even if it's only 1 second of difference... or, uh..., would that be 2 seconds?); _or_ if you're actually in a different timezone (e.g. because you're in a different location), then the timestamps will convert incorrectly. em If you've ever noticed that the _filesystem_ timestamps _on_ the files in your digital camera are an hour (+/- 1 second...) off from the _EXIF_ timestamps _inside_ the files..., that's why. And the situation is both better and worse now with exFAT: the _precision_ issue is basically fixed; the _accuracy_ issue of not knowing which timezone is _theoretically_ fixed in that there is a timezone field in the timestamps..., but when dealing with embedded systems that write to exFAT you'll find that said timezone field is set to something arbitrary and bogus. -- Connect with me on the GNU social network! <https://status.hackerposse.com/rozzin> Not on the network? Ask me for more info! _______________________________________________ gnhlug-discuss mailing list gnhlug-discuss@mail.gnhlug.org http://mail.gnhlug.org/mailman/listinfo/gnhlug-discuss/