こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はDateTimeモジュールについて学んだことをまとめます。
目次
1.DateTimeモジュール で遊んでみたシリーズ① -事前準備編
2.DateTimeモジュール で遊んでみたシリーズ② -DateTime.add ~ DateTime.compare の紹介
3.DateTimeモジュール で遊んでみたシリーズ③ -DateTime.convert ~ DateTime.from_gregorian_seconds の紹介
4.DateTimeモジュール で遊んでみたシリーズ④ -DateTime.from_iso8601 ~ DateTime.from_naive! の紹介
5.DateTimeモジュール で遊んでみたシリーズ⑤ -DateTime.from_unix ~ DateTime.new! の紹介
6.DateTimeモジュール で遊んでみたシリーズ⑥ -DateTime.now ~ DateTime.shift_zone! の紹介
7.DateTimeモジュール で遊んでみたシリーズ⑦ -DateTime.to_date ~ DateTime.to_string の紹介
8.DateTimeモジュール で遊んでみたシリーズ⑧ -DateTime.to_time ~ DateTime.utc_now の紹介(本記事)
9.DateTimeモジュール で遊んでみたシリーズ番外編 -Livebookでtzdata導入
目的
DateTimeモジュールに含まれる関数を触って機能を理解したい
実行環境
Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.17.3
Erlang v27.0
前提
本記事を手元検証するには、前提としてtzdataの導入が必要です。
まだの場合は下記1.または2.で準備をしてください。
1.local環境でtzdataの導入
2.Livebookでtzdataの導入
DateTime.to_timeとは
DateTime.to_time(datetime)
はdatetime
をTime構造体に変換します。
時刻以外の情報は失われます。
例
DateTime.to_time(~U[2015-01-23 23:50:07Z])
~T[23:50:07]
タイムゾーンがUTC以外の時も同様
dt = DateTime.now!("Asia/Tokyo")
#DateTime<2024-12-22 16:40:26.608893+09:00 JST Asia/Tokyo>
DateTime.to_time(dt)
~T[16:40:26.608893]
DateTime.to_unixとは
DateTime.to_unix(datetime, unit \\ :second)
はdatetime
を、UNIX時間に変換します。
タイムゾーン情報は失われます(UNIX時間にはタイムゾーン情報が含まれないため)
この関数の逆はDateTime.from_unix(integer, unit \\ :second, calendar \\ Calendar.ISO)
です。
例
DateTime.to_unix(~U[2016-05-24 13:26:08Z])
1464096368
タイムゾーンがUTC以外の時も同様
dt = DateTime.now!("Asia/Tokyo")
#DateTime<2024-12-22 16:49:32.938887+09:00 JST Asia/Tokyo>
DateTime.to_unix(dt)
1734853772
DateTime.truncateとは
DateTime.truncate(datetime, precision)
はdatetime
をpresition
の桁で切り捨てます。
例
dt = %DateTime{year: 2017, month: 11, day: 7, zone_abbr: "CET",
hour: 11, minute: 45, second: 18, microsecond: {123456, 6},
utc_offset: 3600, std_offset: 0, time_zone: "Europe/Paris"}
#DateTime<2017-11-07 11:45:18.123456+01:00 CET Europe/Paris>
presition
が:microsecond
のとき
DateTime.truncate(dt, :microsecond)
#DateTime<2017-11-07 11:45:18.123456+01:00 CET Europe/Paris>
presition
が:millisecond
のとき
DateTime.truncate(dt, :millisecond)
#DateTime<2017-11-07 11:45:18.123+01:00 CET Europe/Paris>
presition
が:second
のとき
DateTime.truncate(dt, :second)
#DateTime<2017-11-07 11:45:18+01:00 CET Europe/Paris>
DateTime.utc_nowとは(utc_now/1)
DateTime.utc_now(calendar_or_time_unit \\ Calendar.ISO)
は現在の日時をUTCで返します。
calendar_or_time_unit
で表示する精度を指定してそれより後の桁を切り捨てることも可能です。
タイムゾーンを指定して現在の日時を取得したい場合はDateTime.now/2
を使用してください。
例
引数無しの場合
datetime = DateTime.utc_now()
~U[2024-12-22 13:39:11.183133Z]
デフォルトの精度(:microsecond)が適用されます
datetime.microsecond
{183133, 6}
calendar_or_time_unit
が:native
のとき
datetime0 = DateTime.utc_now(:native)
~U[2024-12-22 13:41:17.348314Z]
デフォルトの精度(:microsecond)が適用されます
datetime0.microsecond
{348314, 6}
calendar_or_time_unit
が:microsecond
のとき
datetime1 = DateTime.utc_now(:microsecond)
~U[2024-12-22 13:45:49.792390Z]
デフォルトの精度(:microsecond)が適用されます
datetime1.microsecond
{792390, 6}
calendar_or_time_unit
が:millisecond
のとき
datetime2 = DateTime.utc_now(:millisecond)
~U[2024-12-22 13:49:52.958Z]
小数点以下4桁(:millisecond)で切り捨てます。
datetime2.microsecond
{958000, 3}
calendar_or_time_unit
が:second
のとき
datetime3 = DateTime.utc_now(:second)
~U[2024-12-22 13:52:10Z]
整数桁(:second)で切り捨てます。
datetime3.microsecond
{0, 0}
DateTime.utc_nowとは(utc_now/2)
DateTime.utc_now(calendar_or_time_unit \\ Calendar.ISO)
は現在の日時をUTCで返します。
time_unit
とcalender
を明示します。
例
time_unit
が:native
のとき
datetime0 = DateTime.utc_now(:native, Calendar.ISO)
~U[2024-12-22 14:00:13.320949Z]
デフォルトの精度(:microsecond)が適用されます
datetime0.microsecond
{320949, 6}
time_unit
が:microsecond
のとき
datetime1 = DateTime.utc_now(:microsecond, Calendar.ISO)
~U[2024-12-22 14:08:58.485245Z]
デフォルトの精度(:microsecond)が適用されます
datetime1.microsecond
{485245, 6}
time_unit
が:millisecond
のとき
datetime2 = DateTime.utc_now(:millisecond, Calendar.ISO)
~U[2024-12-22 14:09:47.614Z]
小数点以下4桁(:millisecond)で切り捨てます。
datetime2.microsecond
{614000, 3}
time_unit
が:second
のとき
datetime3 = DateTime.utc_now(:second, Calendar.ISO)
~U[2024-12-22 14:10:40Z]
整数桁(:second)で切り捨てます。
datetime3.microsecond
{0, 0}
~Elixirの国のご案内~
↓Elixirって何ぞや?と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます
↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ!私もエンジニア未経験から学習中です。
↓We Are The Alchemists, my friends!1
Elixirコミュニティは本当に優しくて温かい人たちばかり!
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。2
-
@torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。 ↩