paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

bashで今年の残り時間を計算する

今年もあと残りわずかですが、ふと残りの時間を計算したくなりました。

何日かはカレンダー見ればわかるので残り時間(hour)を計算しようと思います。

私の作ったツールでdateコマンドを使って何回かやってますので
今回もdateでやってみます。

パッと思いついた処理はこちら。

  1. 今年の残り時間を算出
  2. 時間に変換
  3. 出力

残り時間はUNIX時間からはじき出すのがスムーズだと思ったので
まずは残り秒数を出します。

%sオプションでUNIX時間がでます。

算出

2020年の元旦と今の時間を引けば残り時間(hour)ですね。
※WSL上でコマンド叩いています。
ワンライナーなので見にくくてすいません。

masashi@DESKTOP-N095TND:~$ date ; expr $(date +%s -d "20200101") - $(date +%s)
Mon Dec 23 22:11:11 DST 2019
697729

計算

この残り秒数を時間に直します。
xargsで渡してやって3600で割れば時間ですね。

xargsの-Iオプションで変数を指定できます。

masashi@DESKTOP-N095TND:~$ date ; expr $(date +%s -d "20200101") - $(date +%s) | xargs -It expr t / 60 / 60
Mon Dec 23 22:11:48 DST 2019
193

出力

最後に文字列とともに出力です。

masashi@DESKTOP-N095TND:~$ date ; expr $(date +%s -d "20200101") - $(date +%s) | xargs -It expr t / 60 / 60 | xargs -Ih echo 2020年まであと h 時間
Mon Dec 23 22:12:44 DST 2019
2020年まであと 193 時間

答え合わせ

今の時間から出た答えを足せば2020年1月1日になるはずですね。

masashi@DESKTOP-N095TND:~$ date -d "193hour"
Tue Dec 31 23:14:14 DST 2019

あら...exprで端数が切り捨てられているので分数が足りていませんね。

時間だけ分かればいいや

残り時間だけ分かればいいことにします。
計算結果に1時間足せば時間だけは合うはずですね。

masashi@DESKTOP-N095TND:~$ date ; expr $(date +%s -d "20200101") - $(date +%s) | xargs -It expr t / 60 / 60 + 1 | xargs -Ih echo 2020年まであと h 時間
Mon Dec 23 22:14:53 DST 2019
2020年まであと 194 時間

再度答え合わせ

masashi@DESKTOP-N095TND:~$ date -d "194hour"
Wed Jan  1 00:15:15 DST 2020

元日になりました!

12/23 22:15現在であと194時間で新年です!

上には上がいる

このコマンドを思いついたのは先週なんですが、
本件をシェル芸botに流したところすぐにebanさんが残り秒まで算出されたコマンドを投稿されました。
(私が本当はやりたかったこと)

  • 私の

  • ebanさんの

いやー天才がいっぱいいますねえ。

参考サイト

[shell] 2つの日付から経過日数を取得する | Tips of Rubbish