どうして?
テレビやラジオのタイムスケジュールを見ると、25:00のような表現を目にすることがありますよね。
ラジオ番組を日常的に聴取していると、"木曜1:00"という表現よりは、"水曜25:00"という表現の方がしっくりくるのですが、これを感覚的に使えるパッケージが見当たらなかったので、作ることにしました。
そもそも、この表現方法の名前が分からなかったので、ここでは仮に30時間制としています。(28時間制とか30時間制とか、いくつかありそうです)
やったこと
timeパッケージを拡張してtimeextパッケージを作りました。
0:00:00-05:59:59間の時刻を30時間制に置き換えます。
https://github.com/bluemon0919/go-timeext
用意した機能はParse
とFormat
です。
timeパッケージの機能との差分は?
timeextパッケージは0:00:00-05:59:59間の時刻を30時間制に置き換えますが、それ以外の時刻についてはtimeパッケージと同じ動作をします。
使い方
時刻を表す文字列をtime.Time型のデータにパースする
例えば2020.07.12 25:00:00
という時刻をパースしたい場合、次のように呼び出すことでtime.Time型のデータを取得します。
この時刻データは2020.07.13 01:00:00
と同値になります。
const Layout string = "2006.01.02 15:04:05"
parsed, _ := timeext.Parse(Layout, "2020.07.12 25:00:00")
f := time.Time(parsed).Format(Layout)
fmt.Println(f) // 2020.07.13 01:00:00
time.Time型のデータから30時間制の文字列を取得する
逆に2020.07.13 01:00:00
を30時間制の時刻として取得したい場合、次のコードで文字列を取得できます。
const Layout string = "2006.01.02 15:04:05"
parsed, _ := time.Parse(Layout, "2020.07.13 01:00:00")
f := timeext.TimeExt(parsed).Format(Layout)
fmt.Println(f) // 2020.07.12 25:00:00