エポック秒(UNIX時間)<->日付文字列 を手軽に変換するepoコマンド
epo
エポック秒(UNIX時間)<->日付文字列 を、タイムゾーンも考慮しつつ手軽に変換できるepoというコマンドを作ってみました。
$ epo 1648771200 1648771200+86400 los_angeles +0900
| Epoch | America/Los_Angeles | +0900 |
| ---------- | ------------------------ | ------------------------ |
| 1648771200 | 2022-03-31T17:00:00-0700 | 2022-04-01T09:00:00+0900 |
| 1648857600 | 2022-04-01T17:00:00-0700 | 2022-04-02T09:00:00+0900 |
背景
最近、
- 目の前にあるUNIX時間な数値を、手元でサッと人間が読める形式に変換したい
- 複数タイムゾーンを考慮したい
という状況がしばしば発生し、ややこしいdateコマンドのオプションを扱ったり、Pythonで書いた簡易ツールで対処していたりしたのですが、せっかくなのである程度汎用的で簡単に使えるコマンドラインツールとして作ってみようかなと思いました。
というのが理由の半分で、Rust勉強用の題材としてちょうどいいかなと考えたのも大きな理由です。
インストール
brewで。
brew tap wtetsu/epo
brew install epo
もしくはバイナリをダウンロード。
ソースコードはこちら
UNIX時間 → 日付文字列
基本的にはUNIX時間を指定するだけ。
$ epo 1648771200
| Epoch | +0900 |
| ---------- | ------------------------ |
| 1648771200 | 2022-04-01T09:00:00+0900 |
複数UNIX時間 x 複数タイムゾーン。
$ epo 1648771200 1648771200+86400 "1648771200+86400*2" greenwich +0900 new_y
| Epoch | Greenwich | +0900 | America/New_York |
| ---------- | ------------------------ | ------------------------ | ------------------------ |
| 1648771200 | 2022-04-01T00:00:00+0000 | 2022-04-01T09:00:00+0900 | 2022-03-31T20:00:00-0400 |
| 1648857600 | 2022-04-02T00:00:00+0000 | 2022-04-02T09:00:00+0900 | 2022-04-01T20:00:00-0400 |
| 1648944000 | 2022-04-03T00:00:00+0000 | 2022-04-03T09:00:00+0900 | 2022-04-02T20:00:00-0400 |
オプションは順序を問いません。また、計算式を書くこともできます。86400を足せば一日後になります。
tz databaseな名前でタイムゾーンを指定するときは、前方一致で絞れればOKです(ここでは"new_y"はAmerica/New_Yorkとみなされる)
また、ちょっとしたJavaScriptを書くことができます(boaを組み込んでみました)
epo "range(10).map(i=>1647165300+i*60)" los_angeles phoenix
出力はMarkdownテーブルでもあるので、そのままここに貼り付けることもできます。
Epoch | America/Los_Angeles | America/Phoenix |
---|---|---|
1647165300 | 2022-03-13T01:55:00-0800 | 2022-03-13T02:55:00-0700 |
1647165360 | 2022-03-13T01:56:00-0800 | 2022-03-13T02:56:00-0700 |
1647165420 | 2022-03-13T01:57:00-0800 | 2022-03-13T02:57:00-0700 |
1647165480 | 2022-03-13T01:58:00-0800 | 2022-03-13T02:58:00-0700 |
1647165540 | 2022-03-13T01:59:00-0800 | 2022-03-13T02:59:00-0700 |
1647165600 | 2022-03-13T03:00:00-0700 | 2022-03-13T03:00:00-0700 |
1647165660 | 2022-03-13T03:01:00-0700 | 2022-03-13T03:01:00-0700 |
1647165720 | 2022-03-13T03:02:00-0700 | 2022-03-13T03:02:00-0700 |
1647165780 | 2022-03-13T03:03:00-0700 | 2022-03-13T03:03:00-0700 |
1647165840 | 2022-03-13T03:04:00-0700 | 2022-03-13T03:04:00-0700 |
上記はAmerica/Los_Angelesがサマータイムに入るタイミングを確認することができます。夏時間に入る時は、1時間すっ飛びます。-0800が-0700になり、突然03:00になっていることがわかると思います。ちなみにAmerica/Phoenixはアメリカですがサマータイムが採用されていない地域として知られており、ずっと-0700のままです。
日付文字列 → UNIX時間
ISO8601っぽい形式を適宜解釈します。
$ epo 2022-04-01 2022-05-01T12:30 2022-06-15T12:30:45 tokyo hawaii gmt
| Date | Asia/Tokyo | US/Hawaii | GMT |
| ------------------- | ---------- | ---------- | ---------- |
| 2022-04-01T00:00:00 | 1648738800 | 1648807200 | 1648771200 |
| 2022-05-01T12:30:00 | 1651375800 | 1651444200 | 1651408200 |
| 2022-06-15T12:30:45 | 1655263845 | 1655332245 | 1655296245 |
実装 (Rust)
これ作った目的の半分以上がRustの勉強目的なのでRustで書きました。Rustでなんらかの実用的なものを作るのは初めてなので基本的なことを調べる時間などは必要でしたが、特別なにかにものすごくハマったみたいなことはありませんでした(ちゃんとRustっぽく書けているかはイマイチ不明ですが)
使用ライブラリ:
- chrono: 日付の扱い
- once_cell: lazy的なやつの扱い
- boa: JavaScriptエンジン
他には、
- GitHub上での各プラットフォーム用ビルド(Windows, OSX, Linux)
- テストカバレッジ (Tarpaulin + Codecov)
みたいな感じです。
Author And Source
この問題について(エポック秒(UNIX時間)<->日付文字列 を手軽に変換するepoコマンド), 我々は、より多くの情報をここで見つけました https://zenn.dev/wtetsu/articles/01910850872f6d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol