Wydaje się, że to naprawdę głupie pytanie, ale jak uzyskać i wyświetlić aktualną datę lub godzinę w Elixirze? Próbowałem przeglądać dokumenty, ale nic nie mogłem znaleźć. Czy muszę używać funkcji Erlang?
83
Wydaje się, że to naprawdę głupie pytanie, ale jak uzyskać i wyświetlić aktualną datę lub godzinę w Elixirze? Próbowałem przeglądać dokumenty, ale nic nie mogłem znaleźć. Czy muszę używać funkcji Erlang?
Aby dokładniej odpowiedzieć na Twoje pytanie (chociaż naprawdę doceniam zalecenie Onorio dotyczące korzystania z Timex!), Możesz pobrać aktualną datę i godzinę ze standardowej biblioteki Erlang za pomocą :calendar.universal_time()
lub :calendar.local_time()
. Istnieje wiele przydatnych funkcji do pracy z datetime
typem Erlanga w calendar
module, ale są one nieco ograniczone i nie zapewniają niczego do analizowania lub formatowania dat, w czym pojawia się Timex.
Możesz użyć,
DateTime.utc_now/0
aby uzyskać UTC DateTime.źródło
Z Erlang 19.1:
Z Erlang 18:
Podaje aktualny znacznik czasu UTC w systemie UNIX.
Dzięki @HenrikN za łącze do posta na blogu http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html
źródło
NaiveDateTime
Jeśli nie zależy Ci na strefie czasowej i chcesz po prostu mieć czystą datę i godzinę, użyj
NaiveDateTime
:NaiveDateTime.utc_now # => ~N[2017-11-30 20:49:54.660724]
DateTime
Jeśli chcesz również szczegóły strefy czasowej, użyj
DateTime
, które również zwróci takie rzeczy, jak nazwa strefy czasowej, przesunięcie UTC, przesunięcie STD i skrót strefy czasowej:DateTime.utc_now # => %DateTime{calendar: Calendar.ISO, day: 30, hour: 20, microsecond: {667345, 6}, minute: 51, month: 11, second: 58, std_offset: 0, time_zone: "Etc/UTC", utc_offset: 0, year: 2017, zone_abbr: "UTC"}
Następnie możesz również wywołać
to_date/1
izto_time/1
tych modułów, aby uzyskać określone wartości daty i godziny ze struktur datetime.źródło
Myślę, że najlepszym rozwiązaniem jest użycie biblioteki timex Paula Schoenfeldera (znanej również jako BitWalker) dla Elixir. Biblioteka jest tutaj: https://github.com/bitwalker/timex i możesz pobrać pakiet z hex.pm https://hex.pm/packages/timex . Paul uprzejmie podał dobre wyjaśnienie, jak korzystać z biblioteki na stronie readme repozytorium github.
Możesz dzwonić do rodzimych bibliotek Erlang, ale myślę, że biblioteka Paula jest lepsza, gdy ma się do czynienia z Elixirem.
źródło
To zależy, w jakim formacie chcesz to mieć.
Możesz użyć dowolnej funkcji ze standardowej biblioteki Erlang firmy Elixir. Tradycyjnie czas otrzymywałbyś dzięki
now/0
funkcji:Oznacza to
time_t
1487,549,978,29683, czyli 19 minut i 38,29683 sekund po północy czasu UTC w poniedziałek 20 lutego 2017 roku.Jednak od Erlang / OTP 18 ta funkcja jest przestarzała; jednym z powodów jest to, że Erlang gwarantuje, że wartość zwracana będzie rosła przy każdym wywołaniu. Jeśli wywołujesz go w ciasnej pętli na maszynie wystarczająco szybko, aby wywołać ją więcej niż raz na mikrosekundę, zwracany znacznik czasu wyprzedza czas rzeczywisty.
Zamiennik to API z większą precyzją i kontrolą . Podstawowym interfejsem tego nowego API jest
os:system_time/0
funkcja, która zwraca czas epoki w jednostce zdefiniowanej przez system:Możesz jednak poprosić o konkretną jednostkę za pomocą
system_time/1
:Od wersji Elixir 1.2 te funkcje były również dostępne w
System
module natywnym :Aby uzyskać bardziej przyjazny, ale nadal natywny interfejs Elixir, użyj
calendar
modułu, który da ci krotki:Od wersji 1.3 Elixir ma również własny zestaw modułów do manipulowania datami i godzinami:
Date
iDateTime
. Możesz użyć jego funkcji, aby uzyskać aktualną datę lub godzinę w następujący sposób:źródło
Aby uzyskać liczbę milisekund (Unix Timestamp):
źródło
Możesz także użyć
:os.timestamp\0
, który zwraca{megaseconds, seconds, microseconds}
z UTC.:os.timestamp |> :calendar.now_to_datetime
da ci teraz w standardowym{{YYYY, MM, DD}, {HH, MM, SS}}
formacie erlang .źródło
Jeśli potrzebujesz poradzić sobie z czasem letnim lub strefami czasowymi, stworzyłem do tego bibliotekę: Kalendarz .
Aby uzyskać aktualny czas, użyj na przykład
Calendar.DateTime.now("America/Los_Angeles")
aktualnego czasu w Los Angeles lubCalendar.DateTime.now_utc
aktualnego czasu UTC.źródło
Aby uzyskać uniksowy znacznik czasu
źródło
Cóż, Timex zwykle przychodzi na ratunek, jednak niektóre z poniższych trików mogą być pomocne:
źródło