Goal
TimexのDateFormatを使う。
Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
Timex: v0.19.5
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”のようなフォーマットに変換したい。
“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付いたっけ?まぁいいや…)
(時間の標準規格(ISO)って、末尾にZ付いたっけ?まぁいいや…)
何でこんなめんどくさいことやってんの?って話ですけれど…
FullCalendarでイベントに指定する時間と言うのがこのフォーマットなんです。
FullCalendarでイベントに指定する時間と言うのがこのフォーマットなんです。
ちなみに…FullCalendarで、
“2015-10-1T1:00:00”とかでイベントのstartかendを指定すると、イベントに表示されないので注意です。
“2015-10-1T1:00:00”とかでイベントのstartかendを指定すると、イベントに表示されないので注意です。
追記
Z必要でした。
正しくは、”2015-10-1T1:00:00Z”でした。
正しくは、”2015-10-1T1:00:00Z”でした。
ついでに、逆にParseする一例を書いておきます。
Example:
iex> DateFormat.parse!("2015-10-21T14:00:00Z", "{ISO}")
Bibliography
Formatting - timex v1.0.0-rc1: http://hexdocs.pm/timex/1.0.0-rc1/extra-formatting.html
Stackoverflow - Formatting a time in Elixir: http://stackoverflow.com/questions/31943400/formatting-a-time-in-elixir
Stackoverflow - Formatting a time in Elixir: http://stackoverflow.com/questions/31943400/formatting-a-time-in-elixir