Gravio 4の日付フォーマットはGo言語の形式を使う


Gravio 4のマッピングで、日付をフォーマットしたい時は DateFormat という関数を使う。

デフォルトのフォーマット

例えば、LINEにセンサーからデータ取得したい日付を送る場合、そのままだとデフォルトのフォーマットで送信される。

cp.Message
tv.Timestamp

結果はこう。Web APIなんかにJSONで投げるときはだいたいこのままでもいいですが、LINEやSlackに投げるときには味気ない。

任意のフォーマットに変換する

そういうときに DateFormatを使います。

cp.Message
DateFormat(tv.Timestamp, "2006年1月2日 15時04分05秒にデータを受信しました")

DateFormatの詳細は、ヘルプの中に書かれてますが、次のように引数を渡します。

DateFormat(t, layout)
引数 内容
t 日付型のデータ
layout Go言語形式のレイアウト

Go言語形式の日時フォーマット

これがちょっと曲者。他の言語のように、YだのHHだので指定しない。サンプル日付みたいなものを使って表現します。
かなり雑な覚え方で、正確性に欠くかもしれないですが、次のように覚えておくといいと思います。

単位
2006年 2006,06
1月 1, 01, Jan, January
2日 2, 02, _2
午後3時 3, 03, 15
午前/午後 PM pm, PM
4分 4, 04
5秒 5, 05
秒以下(最後の桁の0は省略) .9 .999, .999999
秒以下(桁数分0で補完) .0 .000, .0000000
タイムゾーン MST,UTC-7時間 MST, -0700, Z07:00
曜日 月曜日 Mon, Monday

詳しくはGo言語のtimeパッケージのヘルプformatのソースコードを見てください。

スニペット

一般的な時刻表記

一般的な時刻
DateFormat(tv.Timestamp, "2006/1/2 15:04:05.000")

日本語の時刻

日本語の時刻単位を付ける場合はそのままフォーマットの中に書けばいいです。

日本語の時刻
DateFormat(tv.Timestamp, "2006年1月2日 15時04分05秒.000 (タイムゾーン MST)")

午前・午後表記にするには、15のところをPM03とします。

日本語の時刻(AM/PM)
DateFormat(tv.Timestamp, "2006年1月2日 PM03時04分05秒.000 (タイムゾーン MST)")

ISO8601形式

あまり最近は使われてないかもしれないですが、ISO8601形式も。
月や日などを二桁にするには 01のように 0を付加します。

IS8601
DateFormat(tv.Timestamp, "20060102T150405-0700")

参考