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

こちらは、いささかお行儀が悪いと言わざるを得ない…。

[$Revision: 1.1 $ $Date: 2009.02.17 12:10:30 $]
[EOF]