web-dev-qa-db-ja.com

Elixirで現在の日付または時刻を取得する

これは本当にばかげた質問のように思えますが、Elixirで現在の日付または時刻を取得および表示するにはどうすればよいですか? ドキュメント を試してみましたが、何も見つかりませんでした。 Erlang関数を使用する必要がありますか?

68
Graham Conzett

より具体的にあなたの質問に答えるために(私はOnorioのTimexの使用を本当にお勧めします!)、:calendar.universal_time()または:calendar.local_time()を使用してErlang標準ライブラリから現在の日付と時刻を取得できます。 datetimeモジュールにはErlangのcalendar型を操作するための便利な関数がいくつかありますが、それらは多少制限されており、日付の解析や書式設定のために何も提供しません。入って来る。

50
bitwalker

DateTime.utc_now/0 を使用してUTC DateTimeを取得できます。

50
Jimmar

Erlang 19.1から:

:os.system_time(:millisecond)

Erlang 18から:

:os.system_time(:milli_seconds)

現在のUNIXタイムスタンプUTCを提供します。

ブログの投稿をリンクしてくれた@HenrikNに感謝します http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html

26
TalkLittle

NaiveDateTime

タイムゾーンを気にせず、純粋な日付と時刻だけが必要な場合は、 NaiveDateTime を使用します。

NaiveDateTime.utc_now
# => ~N[2017-11-30 20:49:54.660724]

日付時刻

タイムゾーンの詳細も必要な場合は、 DateTime を使用します。これにより、タイムゾーン名、UTCオフセット、STDオフセット、タイムゾーンの略語なども返されます。

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"}

その後、これらのモジュールからto_date/1およびto_time/1を呼び出して、datetime構造体から特定の日付と時刻の値を取得することもできます。

15
Sheharyar

ElixirにはPaul Schoenfelder(別名BitWalker)timexライブラリを使用するのが最善の策だと思います。 libはここにあります: https://github.com/bitwalker/timex そしてhex.pmからパッケージを取得できます https://hex.pm/packages/timex =。 Paulは親切に、そのgithubリポジトリのreadmeページでライブラリの使用方法の良い説明を提供しました。

ネイティブのErlangライブラリを呼び出すこともできますが、Elixirを扱う場合はPaulのライブラリが優れていると思います。

11

どの形式で使用するかによります。

ElixirのErlang標準ライブラリの任意の関数を使用できます。従来は、 now/0 関数を使用して時間を取得していました。

iex(1)> :erlang.now
{1487, 549978, 29683}

これは、time_t 1,487,549,978.29683を表します。これは、2017年2月20日月曜日の深夜UTCから19分38.29683秒です。

ただし、Erlang/OTP 18以降、この機能は非推奨です。その理由の1つは、Erlangが戻り値が呼び出しごとに増加することを保証していることです。マイクロ秒ごとに複数回呼び出すのに十分な速度でマシン上のタイトループで呼び出す場合、返されるタイムスタンプはリアルタイムよりも早くなります。

置き換えは より正確で制御可能なAPI です。この新しいAPIへの主なインターフェイスは os:system_time/0 関数で、システム定義の単位でエポック時間を返します:

iex(2)> :os.system_time
1487550102372148000

ただし、system_time/1を使用して特定のユニットをリクエストできます。

iex(3)> :os.system_time(:millisecond)
1487549663928

Elixir 1.2以降、これらの関数はネイティブ System module でも利用できます。

iex(4)> System.system_time(:second)
1487549711

より親しみやすいが、それでもElixirネイティブインターフェイスの場合は、 calendar モジュールを使用します。これにより、タプルが提供されます。

iex(5)> :calendar.universal_time
{{2017, 2, 20}, {0, 26, 47}}

1.3以降、Elixirには日付と時刻を操作するための独自のモジュールスイートがありました: Date および DateTime 。その関数を使用して、次のように現在の日付または時刻を取得できます。

iex(6)> Date.utc_today
~D[2017-02-20]
iex(7)> DateTime.utc_now
#DateTime<2017-02-20 00:27:51.776208Z>
9
Mark Reed

UTCから:os.timestamp\0を返す{megaseconds, seconds, microseconds}を使用することもできます。 :os.timestamp |> :calendar.now_to_datetimeは、erlang標準{{YYYY, MM, DD}, {HH, MM, SS}}形式で提供します。

5
G Amini

夏時間やタイムゾーンを処理する必要がある場合は、そのライブラリを作成しました: Calendar

現在の時刻を取得するには、たとえば、ロサンゼルスの現在の時刻にCalendar.DateTime.now("America/Los_Angeles")を、UTCの現在の時刻にCalendar.DateTime.now_utcを使用します。

5
Lau

UNIXタイムスタンプを取得するには

DateTime.to_unix(DateTime.utc_now)
1
radzserg

ミリ秒数を取得するには(Unix Timestamp):

DateTime.utc_now() |> DateTime.to_unix(:millisecond)
1
Sam Houston