<div dir="ltr">Hello Joe,<div><br></div><div>erlang:localtime() will return the local time as a {date, time} tuple according to your OS clock. As you mentioned, erlang:system_time() is the POSIX time which is UTC (UTC-ish since POSIX time doesn't account for leap seconds).</div><div><br></div><div>Also Erlang 19.1 has added support for second, millisecond, microsecond, etc as units. Previously they were seconds, milli_seconds, micro_seconds, etc which did not agree with the SI convention. Therefore I believe you are reading the documentation for the most recent Erlang version while using an older version. You could try the latest Erlang or use the now deprecated "seconds" and "micro_seconds" units instead of the correct "second" and "microsecond".</div><div><br></div><div class="gmail_extra"><div><div class="m_9212161373271107918gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div><br></div><div><span style="font-size:13px"><div><span style="font-family:arial,sans-serif;font-size:13px;border-collapse:collapse"><b>José Valim</b></span></div><div><span style="font-family:arial,sans-serif;font-size:13px;border-collapse:collapse"><div><span style="font-family:verdana,sans-serif;font-size:x-small"><a href="http://www.plataformatec.com.br/" style="color:rgb(42,93,176)" target="_blank">www.plataformatec.com.br</a></span></div><div><span style="font-family:verdana,sans-serif;font-size:x-small">Skype: jv.ptec</span></div><div><span style="font-family:verdana,sans-serif;font-size:x-small">Founder and Director of R&D</span></div></span></div></span></div></div></div></div></div>
<br><div class="gmail_quote">On Fri, Oct 21, 2016 at 4:30 AM, Joe Armstrong <span dir="ltr"><<a href="mailto:erlang@gmail.com" target="_blank">erlang@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">When is now?<br>
<br>
I want the raw uncorrected system time - I assume this is<br>
<br>
   erlang:system_time()<br>
<br>
Seems to return the raw system clock in nanosconds past Epoch<br>
<br>
I want to convert this to a printable local time that agrees with my<br>
wristwatch (ie what the man on the Clapham omnibus might call the<br>
time)<br>
<br>
So I'd like to convert this to<br>
Year,Month,Day,Hour,Min,Sec,Fr<wbr>action of sec<br>
<br>
There seems to be no function to do this (strange since,<br>
this seems to me to be a common thing one might want to do).<br>
<br>
In the old days I'd write:<br>
<br>
t1() -><br>
    T1 = erlang:timestamp(),<br>
    calendar:now_to_local_time(T1)<wbr>.<br>
<br>
This works fine:<br>
<br>
 > t1:t1().<br>
  {{2016,10,21},{9,59,59}}<br>
<br>
After scratching my head and reading the manual pages<br>
I ended up with this:<br>
<br>
t2() -><br>
    T1 = erlang:system_time(),<br>
    system_time_to_ymdhms(T1).<br>
<br>
system_time_to_ymdhms(T) -><br>
    S = erlang:convert_time_unit(T, native, seconds),<br>
    {Days, X} = calendar:seconds_to_daystime(S<wbr>),<br>
    {Y,Month,Day} = calendar:gregorian_days_to_dat<wbr>e(Days),<br>
    {{Y+1970,Month,Day}, X}.<br>
<br>
Now stunningly obvious - and wrong by 2 hours<br>
(The erlang manual page is WRONG - it's seconds (plural) not second)<br>
<br>
   > t1:t1().<br>
   {{2016,10,21},{10,18,32}}<br>
   > t1:t2().<br>
   {{2016,10,21},{8,18,34}}<br>
<br>
The erlang manual page also says<br>
<br>
QUOTE<br>
The erlang:timestamp() BIF is equivalent to:<br>
<br>
timestamp() -><br>
   ErlangSystemTime = erlang:system_time(microsecond<wbr>),<br>
   MegaSecs = ErlangSystemTime div 1000000000000,<br>
   Secs = ErlangSystemTime div 1000000 - MegaSecs*1000000,<br>
   MicroSecs = ErlangSystemTime rem 1000000,<br>
   {MegaSecs, Secs, MicroSecs}.<br>
<br>
<br>
Which is totally incorrect since it crashes<br>
<br>
t3() -><br>
    T1 = timestamp(),<br>
    calendar:now_to_local_time(T1)<wbr>.<br>
<br>
timestamp() -><br>
    ErlangSystemTime = erlang:system_time(microsecond<wbr>),<br>
    MegaSecs = ErlangSystemTime div 1000000000000,<br>
    Secs = ErlangSystemTime div 1000000 - MegaSecs*1000000,<br>
    MicroSecs = ErlangSystemTime rem 1000000,<br>
    {MegaSecs, Secs, MicroSecs}.<br>
<br>
> t1:t3().<br>
** exception error: bad argument<br>
     in function  erlang:system_time/1<br>
        called as erlang:system_time(microsecond<wbr>)<br>
     in call from t1:timestamp/0 (t1.erl, line 26)<br>
     in call from t1:t3/0 (t1.erl, line 22)<br>
<br>
At which point I'm flummoxed - the erlang manual page is totally wrong<br>
in several places. The routines in calendar are not in phase with the<br>
changes in time routine.<br>
<br>
And I still can't convert erlang:system_time() to my local time<br>
since it's two hour wrong<br>
<br>
/Joe<br>
______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/list<wbr>info/erlang-questions</a><br>
</blockquote></div><br></div></div>