now() and arithmetic

Per Hedeland per@REDACTED
Mon May 6 14:23:04 CEST 2002


Matthias Lang <matthias@REDACTED> wrote:
>
> > Does TZ actually affect now() on some platforms? 
>
>I think the manpage is wrong:
[snip]
>              It can only be used to check the local time of  day
>              if  the  time-zone info of the underlying operating
>              system is properly configured.
>
>now() is defined as being the elapsed time since 00:00 GMT, Jan 1,
>1970, so it should be independent of the timezone in any case. Maybe
>the last sentence should be moved to the calendar module, under
>now_to_local_time/1.

It does sound weird - perhaps what it was supposed to say was that if
your local time is set right, but your time zone is not (a rather common
problem, actually), now() will *not* return time since the epoch even if
your OS claims to support this (neither will gettimeofday(), of course).
So I guess depending on your viewpoint, the answer to Bruce's question
above could actually be "yes".:-)

>Digging deeper: the value now() returns is based on
>sys_gettimeofday(), which, for all unix implementations, is a call to
>gettimeofday with a NULL second argument. Under linux that means TZ
>does not affect it.

As Bengt indicates, the second argument is irrelevant/obsolete/
deprecated and just generally useless. It's a remnant from a time when
someone could actually think that there was an easy way out of the
timezone/DST mess.

> as soon as NTP was configured, the system
>time would adjust itself by about a year.

>Now that the problem is fixed, the same series of events causes no
>greater damage than now() running 1% faster than it really should, so
>all of our internal timers are 1% shorter than nominal.

...And after running for a mere 100 years, the "time" returned by now()
will have caught up with reality.:-)

--Per Hedeland
per@REDACTED



More information about the erlang-questions mailing list