silverdr
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
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #ai
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 4- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
al2o3cr
Based on the implementation of
DateTime.utc_now/1:https://github.com/elixir-lang/elixir/blob/a64d42f5d3cb6c32752af9d3312897e8cd5bb7ec/lib/elixir/lib/calendar/datetime.ex#L93-L95
I’d guess the documentation’s suggestion is for efficiency; no point in building an intermediate
DateTimejust to turn it right back into an integer.silverdr
Thank you for your response! Yes, it makes little sense to waste cycles on converting from one representation to another only to convert it immediately back to the original one. But now this is even more confusing. As the DateTime docs say about
from_unix!/3:Which would imply that the result of
System.os_time()is “always in UTC”. How can (general relativity aside) something that is always in UTC “be adjusted forwards or backwards in time with no limitation […]” as the System docs explicitly warn about?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.
silverdr
Right, makes sense! Thanks.