silverdr
DateTime.to_unix() vs System.os_time()
DateTime documentation contains the following sentence:
If you want to get the current time in Unix seconds, do not do
DateTime.utc_now() |> DateTime.to_unix(). Simply callSystem.os_time(:second)instead.
Nice, but… System documentation says about os_time/0 and os_time/1 as follows:
This time may be adjusted forwards or backwards in time with no limitation and is not monotonic.
Now, I DO “want to get the current time in Unix seconds” (or microseconds) but I want it to be the current time in UTC, God forbid in one of the tons of useless “time zones”, nor with / without equally useless DST changes. So the question - how is doing System.os_time(:second) supposed to be a better equivalent of doing DateTime.utc_now() |> DateTime.to_unix()? Am I missing something here?
P. S. Yes, I do run my computers (including the one I write these words on) on UTC so I believe in such case I expect those to be equivalent, right? Still more than once I had to work on servers configured… well… differently and had to deal with code that never expected to be run “in different timezone”, so I am really curious what’s the case here
Marked As Solved
hauleth
NTPd adjustments. Simply your machine may have invalid time set and on the next check the time will be shifted to match the result returned from the NTP server.
Also Liked
al2o3cr
Based on the implementation of DateTime.utc_now/1:
I’d guess the documentation’s suggestion is for efficiency; no point in building an intermediate DateTime just to turn it right back into an integer.







