【Mac】カウントダウンを表示
今年はいろいろとイベントがあるので、GeekTool でカウントダウンを表示したくなった。
カウントダウンのシェルスクリプト
シェルスクリプトの基本的なことは以下の通り。
🔗 【Mac】シェルスクリプトの使い方 | 林檎コンピュータ
📝 countdown.sh#!/bin/sh
function keisan() {
Time=$1
fun=`echo $((Time/60))`
byo=`echo $((Time%60))`
if test $fun -ge 60; then
ji=`echo $((fun/60))`
fun2=`echo $((fun%60))`
if test $ji -ge 24; then
nichi=`echo $((ji/24))`
ji2=`echo $((ji%24))`
echo "${nichi}"'日'"${ji2}"'時間'
else
echo "${ji}"'時間'"${fun2}"'分'
fi
else
echo "${fun}"'分'"${byo}"'秒'
fi
}
if test -z "$1"; then
exit 0
else
jikoku=$1
fi
if [[ "$jikoku" =~ ^[0-9]+$ ]]; then #引数が数字かどうか
keta=`echo ${#jikoku}` #桁数を調べる
else
exit 0
fi
if test "$keta" -eq 8; then #時刻は省略可能
jikoku=`echo "$jikoku"'000000'`
keta=14
fi
if test "$keta" -eq 14; then
target=`date -j -f "%Y%m%d%H%M%S" "$jikoku" "+%s"`
now=`date +%s`
Time=`echo $((target - now))`
if test "$Time" -ge 0; then
keisan "$Time"
else
echo '終了' #目標の時間を過ぎたら終了
exit 0
fi
else
exit 0
fi
これを GeekTool で 60 秒に一度実行することにした。
GeekTool については以下の記事で基本的なことを書いた。
🔗 【Mac】現在の気温をデスクトップに | 林檎コンピュータ
コマンドは以下のようにした。
echo '御代替わりまであと'`~/スクリプトの場所/countdown.sh 20190501000000`
「スクリプトの場所」は書き換えが必要だ。
時刻のフォーマットは西暦が 4 桁、他は 2 桁。時間は 24 時間表記で、14 桁になるように指定する。ちなみに、
if [[ "$jikoku" =~ ^[0-9]+$ ]]; then
keta=`echo ${#jikoku}`
fi
の、[[ "$jikoku" =~ ^[0-9]+$ ]]
は入力されたものが数字か、そうではないかを調べている。
echo ${#jikoku}
は文字数を返す変数展開だ。
UNIX Time
カウントダウンなんて簡単だろうと思ったら、これが大変だった。
「未来の時間 – 現在の時間」をどうやればいいんだろうか、と悩んでしまった。
しかし UNIX Time というものを知って、やっと見通しがついた。
誰のアイディアか知らないが、UNIX Time というのがあるのだ。1970 年元旦 0 時 0 分 0 秒からずっと、一秒に 1 ずつ加算されていく数字、というものがあるのだ。
1970 年元日 0 時 0 分 0 秒の UNIX Time は 0 である(UTC)。
同日 0 時 0 分 1 秒の UNIX Time は 1 である。
これが、翌日 1 月 2日の 0 時 0 分 0 秒になると、もう 86400 だ。
翌日の同じ時間では 172800。
つまり毎日 86400 ずつ増えていく。それが UNIX Time だ。怖い、というべきではないだろうか。ドラえもんにバイバインという有名なエピソードがあるが、それを思い出す。
約 49 年たった今、どうなってしまっているのか。確認するのは簡単だ。date コマンドに「+%s」というフォーマットをつけると表示される。以下は日本時間である。
$ date "+%s"⏎
1549019079
思ったより増えていない気がして、ひと安心だ。
過去や未来の UNIX Time を取得するなら、以下のようにフォーマットを定めて指定する。
$ date -j -f "%Y-%m-%d %H:%M:%S" "2019-05-01 00:00:00" "+%s"⏎
1556636400
つまり、
「未来のUNIXTime」 – 「現在のUNIXTime」 = 「残り時間の秒数」
ということになる。十進法の簡単な引き算やら足し算で時間を扱えるのである。
ちなみに、UNIX Time を時刻表記に戻すのも簡単だ。
$ date -r 1556636400⏎
2019年 5月 1日 水曜日 00時00分00秒 JST