time.Timeの値をn分置きの値にする
はじめに
今回、初投稿となります。
Inputとして得た知識をOutputするのも大事だな、と思い、今回記事を書いてみることにしました。
普段は、iOS/Androidアプリエンジニアとして、主にSwiftやKotlinで書いていますが、ちょっとしたスクリプト的なものや、プライベートで作るものはGoを使っていたりします。
本題へ...
では本題です。
普段の業務のちょっとした雑務を楽にしたい!ということで、空き時間に地味にコマンドラインツールなどを作っている時でした。
今回は、業務時間の管理/各タスクにかかった時間などを逐一集計し、1日の業務の最後に日報へ載せるテキストを自動生成するツールを作っていました。
その時、私の会社では始業時間/終業時間は15分刻みで計算されるのですが、ふと time.Time
の値の分数を15分置きの値にする方法は無いか、ということを調べていましたら、公式ドキュメントにちょうどよいものがありました。
使うメソッドは Truncate()
です。
ソースコード
出力例
$ go run truncate_time.go 9:14
9:14 --(truncate)--> 9:00
$ go run truncate_time.go 9:15
9:15 --(truncate)--> 9:15
$ go run truncate_time.go 9:29
9:29 --(truncate)--> 9:15
$ go run truncate_time.go 9:30
9:30 --(truncate)--> 9:30
time.Time
型の Truncate()
メソッドの引数に 15 * time.Minute
と指定しています。
これで、15分置きの時間にすることができます。
※最初は Truncate()
の処理を自力で書いていましたが、よく公式ドキュメントを見てみたら Example にちゃんと使用例が書いていましたね...
最後に
Go言語はシンプルな言語体系で、公式のドキュメントが充実しているので、学びやすく、すぐに成果物が作れるところが利点だと思います。
また、最近では各種クラウド(AWSとかGCPとか)のサーバーレスのサービスでも対応していることが多く、Webシステム系にも使えるので良いですね!
書いていて楽しい言語の一つだと思います。
また、 go build
で実行可能バイナリにすることもできるので、そのままコマンドツールだけがほしい人にも配布ができるのも良いです。
ただシンプルすぎるがゆえに、ちょっとかゆい所に手が届かないところがある...!というのもあるので、ここは一長一短といった感じでしょうか。
最近はRustも勢いがあり、こちらも学んでみたいなと思ったので、そのうち何かツールを作るのにRustを活用してみて、Goと比較なんてのもやってみようかと思います。
本業はiOS/Androidアプリエンジニアなので、KotlinやSwiftのTipsなどもそのうち書くかも...
Discussion