スポンサーリンク

2015年10月20日

[Elixir]Timexを使って日時のフォーマット変換を行う

とある錬金術師の万能薬(Elixir)

Goal

TimexのDateFormatを使う。

Dev-Environment

OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
Timex: v0.19.5

Context

入力フォームからyear、month、day…っと言ったように各個に入力されたデータを、
“2015-10-21T14:52:00”のようなフォーマットに変換したい。
今のところ、日時関連を扱うライブラリだとTimex一択なので、それを使う。
しかし、変換の仕方がよく分からなかったので、忘れないようにメモ。
Timexで使われるオブジェクトを指定した値で生成する。

Example:

iex> use Timex
nil
iex> date = Date.from({{2015, 10, 21}, {14, 00, 00}})
%Timex.DateTime{calendar: :gregorian, day: 21, hour: 14, minute: 0, month: 10,
 ms: 0, second: 0,
 timezone: %Timex.TimezoneInfo{abbreviation: "UTC", from: :min,
  full_name: "UTC", offset_std: 0, offset_utc: 0, until: :max}, year: 2015}
日付を変換する。

Example:

iex> ymd = DateFormat.format!(date, "%Y-%m-%d", :strftime)
"2015-10-21"
(ymd = やればもっとできる)

Example:

iex> hms = DateFormat.format!(date, "{h24}:{0m}:{0s}")
"14:00:00"
二つの文字列を連結する。

Example:

iex> ymd <> "T" <> hms
"2015-10-21T14:00:00"
これでできあがり。
(時間の標準規格(ISO)って、末尾にZ付いたっけ?まぁいいや…)
何でこんなめんどくさいことやってんの?って話ですけれど…
FullCalendarでイベントに指定する時間と言うのがこのフォーマットなんです。
ちなみに…FullCalendarで、
“2015-10-1T1:00:00”とかでイベントのstartかendを指定すると、イベントに表示されないので注意です。

追記

Z必要でした。
正しくは、”2015-10-1T1:00:00Z”でした。
ついでに、逆にParseする一例を書いておきます。

Example:

iex> DateFormat.parse!("2015-10-21T14:00:00Z", "{ISO}")

Bibliography

人気の投稿