これは本当にばかげた質問のように思えますが、Elixirで現在の日付または時刻を取得および表示するにはどうすればよいですか? ドキュメント を試してみましたが、何も見つかりませんでした。 Erlang関数を使用する必要がありますか?
より具体的にあなたの質問に答えるために(私はOnorioのTimexの使用を本当にお勧めします!)、:calendar.universal_time()
または:calendar.local_time()
を使用してErlang標準ライブラリから現在の日付と時刻を取得できます。 datetime
モジュールにはErlangのcalendar
型を操作するための便利な関数がいくつかありますが、それらは多少制限されており、日付の解析や書式設定のために何も提供しません。入って来る。
DateTime.utc_now/0
を使用してUTC DateTimeを取得できます。
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
タイムゾーンを気にせず、純粋な日付と時刻だけが必要な場合は、 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構造体から特定の日付と時刻の値を取得することもできます。
ElixirにはPaul Schoenfelder(別名BitWalker)timexライブラリを使用するのが最善の策だと思います。 libはここにあります: https://github.com/bitwalker/timex そしてhex.pmからパッケージを取得できます https://hex.pm/packages/timex =。 Paulは親切に、そのgithubリポジトリのreadmeページでライブラリの使用方法の良い説明を提供しました。
ネイティブのErlangライブラリを呼び出すこともできますが、Elixirを扱う場合はPaulのライブラリが優れていると思います。
どの形式で使用するかによります。
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>
UTCから:os.timestamp\0
を返す{megaseconds, seconds, microseconds}
を使用することもできます。 :os.timestamp |> :calendar.now_to_datetime
は、erlang標準{{YYYY, MM, DD}, {HH, MM, SS}}
形式で提供します。
夏時間やタイムゾーンを処理する必要がある場合は、そのライブラリを作成しました: Calendar 。
現在の時刻を取得するには、たとえば、ロサンゼルスの現在の時刻にCalendar.DateTime.now("America/Los_Angeles")
を、UTCの現在の時刻にCalendar.DateTime.now_utc
を使用します。
UNIXタイムスタンプを取得するには
DateTime.to_unix(DateTime.utc_now)
ミリ秒数を取得するには(Unix Timestamp):
DateTime.utc_now() |> DateTime.to_unix(:millisecond)