Muszę przekonwertować {{2012, 9, 21}, {13, 21, 11}} na znacznik czasu(). Jak mogę to zrobić? Dziękuję.Jak przekonwertować datetime() na timestamp() w erlang
Odpowiedz
wersji poprawiono:
Seconds = calendar:datetime_to_gregorian_seconds(DateTime) - 62167219200,
%% 62167219200 == calendar:datetime_to_gregorian_seconds({{1970, 1, 1}, {0, 0, 0}})
{Seconds div 1000000, Seconds rem 1000000, 0}.
Jest ok, ale uwaga, jeśli używasz funkcji erlang: now(), aby uzyskać znacznik czasu dla porównania lub y obliczenie, jeśli da oszacowanie czasu od 1/1/1970, natomiast kalendarz: datetime_to_gregorian_seconds/1 dokonuje oceny z 1/1/0. Więc jest różnica 719528 dni ... – Pascal
Ups, masz rację. A ponieważ 'timestamp()' jest zdefiniowany jako rozpoczynający się od 1970, jeśli to możliwe, moja odpowiedź brzmi: _nie_ dobrze :) –
Próbowałem powyższej funkcji: Timestamp = datetime_to_now ({{2012, 9, 21}, {13, 21, 00 }}), a następnie kalendarz: now_to_local_time (Timestamp) zwraca {{2012,9,21}, {17,21,0}}. Moja strefa czasowa to + 4h. Jak rozumiem, funkcja zwraca znacznik czasu w UTC. Dobrze? –
Można to wykorzystać
to_timestamp({{Year,Month,Day},{Hours,Minutes,Seconds}}) ->
(calendar:datetime_to_gregorian_seconds(
{{Year,Month,Day},{Hours,Minutes,Seconds}}
) - 62167219200)*1000000;
Jest to część modułu z tego Github/Arboreus
Related: http://stackoverflow.com/questions/825151/convert-timestamp-to-datetime-in-erlang –