日付を計算したり、日付の書式を変換する dt コマンドを作りました。

日付を計算したり、日付の書式を変換するコマンドを作りました。

github.com

書くこと

  • なにができる?
  • 使い方
  • インストール
  • 動機
  • まとめ

なにができる?

  • 日付の加算と減算
  • 日付の書式を変換

これだけをしてくれるコマンドです。

使い方

システム時刻の1年3ヶ月20秒後を求める

$ date "+%Y/%m/%d %H:%M:%S"
2018/05/12 17:30:00

$ dt now +1Y +3M +20s
2019/08/12 17:30:20

計算元の日付を指定

$ dt "2018/05/12 17:30:00" +1Y +3M +20s
2019/08/12 17:30:20

日付の加算

$ dt "2018/05/12 17:30:00" +1Y
2019/05/12 17:30:00

$ dt "2018/05/12 17:30:00" +1M
2018/06/12 17:30:00

$ dt "2018/05/12 17:30:00" +1D
2018/05/13 17:30:00

$ dt "2018/05/12 17:30:00" +1h
2018/05/12 18:30:00

$ dt "2018/05/12 17:30:00" +1m
2018/05/12 17:31:00

$ dt "2018/05/12 17:30:00" +1s
2018/05/12 17:30:01

# '+' は省略可能
$ dt "2018/05/12 17:30:00" 1Y 3M 20s
2019/08/12 17:30:20

日付の減算

$ dt "2018/05/12 17:30:00" -1Y -3M -20s
2017/02/12 17:29:40

入力フォーマット

# コマンド標準
$ dt "2018/05/12 17:30:00" +1Y +3M +20s
2019/08/12 17:30:20

# RFC822
$ dt -o def "12 May 18 17:30 MST" +1Y +3M +20s
2019/08/12 17:30:20

$ dt -o def 1526113800 +1Y +3M +20s
2019/08/12 17:30:20# unix 秒

自動判断されるフォーマット

自動判断されるフォーマット

入力フォーマットを指定

# unix ミリ秒
$ dt -i unixm -o def 1526113800000 +1Y +3M +20s
2019/08/12 17:30:20

# カスタムフォーマット
$ dt -i "02-Jan-06 15:04:05" -o def "12-May-18 17:30:00" +1Y +3M +20s
2019/08/12 17:30:20

出力フォーマット

デフォルトは入力フォーマットと同じ。

$ dt "2018-05-12 17:30:00" +1Y +3M +20s
2019-08-12 17:30:20

$ dt 1526113800 +1Y +3M +20s
15300622820

出力フォーマットを指定

$ dt -o def 1526113800 +1Y +3M +20s
2019/08/12 17:30:20

$ dt -o "02-Jan-06 15:04:05" 1526113800 +1Y +3M +20s
12-Aug-19 17:30:20

ヘルプ

$ dt --help
# ...

インストール

Homebrew

$ brew tap ebc-2in2crc/dt
$ brew install dt

Developer

$ go get -u github.com/ebc-2in2crc/dt/...

手動

https://github.com/ebc-2in2crc/dt/releases からダウンロードした zip ファイルを展開した中にあるファイルを、パスの通ったディレクトリに入れる。

動機

DB に格納されている日付が unix 秒だったり、それに対する加減算をしたり、入力と出力で日付のフォーマットが異なっていたりするのが面倒くさくて作りました。date コマンドでも同じことはできなくもありませんが……

実装言語が Go なのは、以前チュートリアルをやったきり触っておらず文法そのほかすべてをきれいに忘れてしまったので、再入門するつもりで選びました。

まとめ

バグとかあると思いますし、「おそいよ!」とか「こーしたら使いやすくなる」とかあったら、イシュー作ったり声かけてもらえると嬉しいです。

ということで dt コマンド の紹介でした。