date tips
date から epoch への変換
現在日付時刻を epoch で取り出したい場合、 FreeBSD 標準の date コマンドには「%s」があるので、これを用いることができる。
% date '+%s' 1234870753
perl を使ってもよければ、以下のワンライナで同じことができる。
% perl -e 'print time."\n"'
任意の日付時刻を epoch で取りたい場合には、 「-v」を用いて日付を指定することができる。
% date -v2009y -v03m -v01d -v00H -v00M -v00S "+%s" 1235833200
引数の指定がいささか面倒ではあるが /usr/bin/date だけでできるので、 便利と言えば便利だ。
epoch から date への変換
FreeBSD 標準 date であれば 「-f」で書式を指定して日付を解釈する機能があるので、これを用いることができる。
% date -j -f "%s" 225990000 "+%Y %m %d %H %M" 1977 03 01 00 00
perl があれば、もちろん perl でもできる。若干長いが…、
% perl -e ' ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($ARGV[0]); $year+=1900;$mon+=1; printf("%4d %02d %02d %02d %02d %02d\n", $year,$mon,$mday,$hour,$min,$sec); ' 225990000 1977 03 01 00 00 00
ひょっとしたら、もっと簡単に書く方法があるかもしれない。
昨日の日付を求める
「前日の日付を求める」のは、真面目にやろうとするとシェルスクリプトでは難しい。 しかし、真面目にやろうとしなければ、シェルスクリプトなら簡単にできる。
% env TZ=JST+15 date
環境も汚さないし、見た目にもわかりやすいし、コストも低い。
同じ作戦で明日の日付を取ることもできるが、
% env TZ=JST-33 date
こちらは、いささかお行儀が悪いと言わざるを得ない…。