Dies scheint eine wirklich dumme Frage zu sein, aber wie erhält man das aktuelle Datum oder die aktuelle Uhrzeit in Elixir und zeigt sie an? Ich habe versucht, die Dokumente durchzugehen , konnte aber nichts finden. Muss ich eine Erlang-Funktion verwenden?
80
Sie können verwenden
DateTime.utc_now/0
, um UTC DateTime abzurufen.quelle
Aus Erlang 19.1:
Aus Erlang 18:
Gibt den aktuellen UNIX-Zeitstempel UTC an.
Vielen Dank an @HenrikN für die Verknüpfung des Blogposts http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html
quelle
NaiveDateTime
Wenn Sie sich nicht für die Zeitzone interessieren und nur reines Datum und Uhrzeit wünschen, verwenden Sie
NaiveDateTime
:Terminzeit
Wenn Sie auch Zeitzonendetails wünschen, verwenden Sie
DateTime
, wodurch auch Dinge wie Zeitzonenname, UTC-Versatz, STD-Versatz und Zeitzonenabkürzung zurückgegeben werden:Sie können dann auch
to_date/1
undto_time/1
von diesen Modulen aus anrufen , um die spezifischen Datums- und Zeitwerte aus den Datums- / Uhrzeitstrukturen abzurufen.quelle
Ich denke, Ihre beste Wahl ist es, die Timex-Bibliothek von Paul Schoenfelder (auch bekannt als BitWalker) für Elixir zu verwenden. Die Bibliothek ist hier: https://github.com/bitwalker/timex und Sie können das Paket von hex.pm https://hex.pm/packages/timex erhalten . Paul hat freundlicherweise auf der Readme-Seite dieses Github-Repos eine gute Erklärung zur Verwendung der Bibliothek gegeben.
Sie könnten die einheimischen Erlang-Bibliotheken anrufen, aber ich denke, Pauls Bibliothek ist überlegen, wenn es um Elixier geht.
quelle
Es hängt davon ab, in welchem Format Sie es möchten.
Sie können jede Funktion in der Erlang-Standardbibliothek von Elixir verwenden. Traditionell würden Sie die Zeit mit der
now/0
Funktion bekommen:time_t
Dies entspricht 1.487.549.978,29683, was 19 Minuten und 38,29683 Sekunden nach Mitternacht UTC am Montag, dem 20. Februar 2017, entspricht.Seit Erlang / OTP 18 ist diese Funktion jedoch veraltet. Einer der Gründe ist, dass Erlang garantiert, dass der Rückgabewert bei jedem Anruf erhöht wird. Wenn Sie es in einer engen Schleife auf einem Computer schnell genug aufrufen, um es mehr als einmal pro Mikrosekunde aufzurufen, wird der zurückgegebene Zeitstempel der Echtzeit voraus.
Der Ersatz ist eine API mit mehr Präzision und Kontrolle . Die primäre Schnittstelle zu dieser neuen API ist die
os:system_time/0
Funktion, die die Epochenzeit in einer systemdefinierten Einheit zurückgibt:Sie können jedoch eine bestimmte Einheit anfordern mit
system_time/1
:Seit Elixir 1.2 sind diese Funktionen auch im nativen
System
Modul verfügbar :Verwenden
calendar
Sie für eine benutzerfreundlichere, aber dennoch Elixir-native Benutzeroberfläche das Modul, mit dem Sie Tupel erhalten:Seit 1.3 verfügt Elixir auch über eine eigene Reihe von Modulen zur Bearbeitung von Datum und Uhrzeit:
Date
undDateTime
. Sie können seine Funktionen verwenden, um das aktuelle Datum oder die aktuelle Uhrzeit wie folgt abzurufen:quelle
So ermitteln Sie die Anzahl der Millisekunden (Unix-Zeitstempel):
quelle
Sie können auch verwenden
:os.timestamp\0
, was{megaseconds, seconds, microseconds}
von UTC zurückkehrt.:os.timestamp |> :calendar.now_to_datetime
geben Sie jetzt im erlang Standardformat{{YYYY, MM, DD}, {HH, MM, SS}}
.quelle
Wenn Sie sich mit Sommerzeit oder Zeitzonen befassen müssen, habe ich eine Bibliothek dafür erstellt: Kalender .
Um die aktuelle Uhrzeit abzurufen, würden Sie beispielsweise
Calendar.DateTime.now("America/Los_Angeles")
die aktuelle Uhrzeit in Los Angeles oderCalendar.DateTime.now_utc
die aktuelle Uhrzeit in UTC verwenden.quelle
Um einen Unix-Zeitstempel zu erhalten
quelle