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")