Как преобразовать Erlang: timestamp () в нормальный формат даты? - PullRequest
0 голосов
/ 19 сентября 2019

Я хотел бы преобразовать результат erlang: timestamp () в обычный тип даты, тип григорианского календаря.

Обычный тип даты означает «день-месяц-год, час: минуты: секунды».

ExampleTime = erlang:timeStamp(),

ct:pal("~p", [ExampleTime]).

Это показывает {1568,869478,181646}

Я полагаю, что устройство является вторым, но не уверен в том, что он обозначает.

Как его можно преобразовать с помощью кода и его концепции.Если быть более конкретным, я не знаю, но для примера,

{1568, 869478, 181646} == {Год + Месяц, день, час + минуты}.

Ответы [ 4 ]

3 голосов
/ 19 сентября 2019

Пожалуйста, посмотрите документацию erlang: отметка времени () , там написано

erlang: отметка времени () -> отметка времени

типы

Timestamp = timestamp ()

timestamp () =

{MegaSecs :: integer() >= 0,

 Secs :: integer() >= 0,

MicroSecs :: integer() >= 0}

Возвращает текущее системное время Эрланга в формате {MegaSecs, Secs, MicroSecs} ...

Затем календарь модуля библиотеки stdlib предлагает несколько функций преобразования, таких как calendar: now_to_datetime (Now) :

1> calendar:now_to_datetime({1568,869478,181646}).
{{2019,9,19},{5,4,38}}
1 голос
/ 19 сентября 2019

вот мой код:

{{Y,M,D},{ H,MM,SS}} = calendar:now_to_datetime({MegaSecs,Secs,MicroSecs }),

lists:flatten(io_lib:format("~B-~2.10.0B-~2.10.0B ~2.10.0B:~2.10.0B:~2.10.0B", [Y, M, D,H,MM,SS])).

% result like 2019-09-18 12:00:00

0 голосов
/ 24 сентября 2019

Я использовал эту функцию, когда дело доходит до преобразования удобочитаемых временных меток из erlang:timestamp():

format_utc_timestamp(TS, Separator) ->
    {_,_,Micro} = TS,
    {{Year,Month,Day},{Hour,Minute,Second}} = 
        calendar:now_to_universal_time(TS),
    io_lib:format("~4w-~2..0w-~2..0w~s~2..0w:~2..0w:~2..0w.~6..0w",
              [Year,Month,Day,Separator,Hour,Minute,Second,Micro]).

Где TS - это значение временной метки {MegaSecs, Secs, MicroSecs}, а Separator - этострока, которая будет использоваться для красивой печати метки времени.Это даст вам формат с T в качестве разделителя:

2019-09-25T10:19:19.020202 

Если вы хотите получить метку времени ISO 8601 , вы можете выполнить следующее форматирование напоследняя строка функции выше:

io_lib:format("~4w-~2..0w-~2..0wT~w:~2..0w:~2..0wZ", [Year,Month,Day,Hour,Minute,Second])

, что приведет к 2014-09-22T20:53:44Z

0 голосов
/ 19 сентября 2019

Вот пример сгенерированного формата ISO 8601:

1> {{Year, Month, Day}, {Hour, Min, Sec}} = calendar:now_to_datetime(erlang:timestamp()).
{{2019,9,19},{15,7,3}}
2> list_to_binary(io_lib:format("~.4.0w-~.2.0w-~.2.0wT~.2.0w:~.2.0w:~.2.0w.0+00:00", [Year, Month, Day, Hour, Min, Sec])).
<<"2019-09-19T15:07:03.0+00:00">>

Или вы можете использовать erlang:universaltime() вместо calendar:now_to_datetime(erlang:timestamp()) для получения универсального времени

...