<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><div class="gmail_default">Joe,</div><div class="gmail_default"><br></div><div class="gmail_default">The following seems to achieve the desired result:</div><div class="gmail_default"><br></div><div class="gmail_default">7> f(I), f(S), I = erlang:system_time(micro_seconds), S = I div 1000000, calendar:now_to_local_time({S div 1000000, S rem 1000000, I rem 1000000}).</div><div class="gmail_default">{{2016,10,21},{9,2,29}}</div><div class="gmail_default"><br></div><div class="gmail_default">Serge</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Oct 21, 2016 at 6:33 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">My problem is converting the return value of erlang:system_time() to a<br>
local correct printable time that agrees with my clock.<br>
<br>
The value of erlang:local_lime() is irrelevant - the program I am talking to<br>
(SonicPi) reads the same clock as the erlang:system() reads - we need<br>
to clock sync<br>
on this value in a distributed system where other nodes might have<br>
badly adjusted<br>
clocks - so all I want to do is convert the return value of<br>
erlang:local_time() to local time units for debugging purposes.<br>
<br>
<br>
On Fri, Oct 21, 2016 at 11:21 AM, José Valim<br>
<<a href="mailto:jose.valim@plataformatec.com.br">jose.valim@plataformatec.com.<wbr>br</a>> wrote:<br>
> Hello Joe,<br>
><br>
> erlang:localtime() will return the local time as a {date, time} tuple<br>
> according to your OS clock. As you mentioned, erlang:system_time() is the<br>
> POSIX time which is UTC (UTC-ish since POSIX time doesn't account for leap<br>
> seconds).<br>
><br>
> Also Erlang 19.1 has added support for second, millisecond, microsecond, etc<br>
> as units. Previously they were seconds, milli_seconds, micro_seconds, etc<br>
> which did not agree with the SI convention.<br>
<br>
> Therefore I believe you are<br>
> reading the documentation for the most recent Erlang version while using an<br>
> older version.<br>
<br>
This could be true - I'll have to check.<br>
<br>
Actually my erlang is <the latest>-1 (or 2) and my documentation is<br>
what google found for me<br>
<br>
<br>
> You could try the latest Erlang or use the now deprecated<br>
> "seconds" and "micro_seconds" units instead of the correct "second" and<br>
> "microsecond".<br>
><br>
><br>
> José Valim<br>
> <a href="http://www.plataformatec.com.br" rel="noreferrer" target="_blank">www.plataformatec.com.br</a><br>
> Skype: jv.ptec<br>
> Founder and Director of R&D<br>
><br>
> On Fri, Oct 21, 2016 at 4:30 AM, Joe Armstrong <<a href="mailto:erlang@gmail.com">erlang@gmail.com</a>> wrote:<br>
>><br>
>> 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,<wbr>Fraction 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(<wbr>S),<br>
>>     {Y,Month,Day} = calendar:gregorian_days_to_<wbr>date(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(<wbr>microsecond),<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(<wbr>microsecond),<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(<wbr>microsecond)<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">erlang-questions@erlang.org</a><br>
>> <a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
><br>
><br>
______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
</blockquote></div><br></div>