localtime/timelocal
シェルスクリプトの中で前日日付を求める必要があるが、シェルスクリプトでやるのは大変なので、Perlに丸投げ。
use Time::Local; $year = 2008; $mon = 3; $mday = 1; $hours = 0; $min = 0; $sec = 0; $time = timelocal( $sec, $min, $hours, $mday, $mon, $year ); $time -= 60 * 60 * 24; # 60秒×60分×24時間 @a = localtime($time); printf( "%4d%02d%02d\n", $a[5]+1900, $a[4], $a[3]);
あえて3月1日の前日を選んだのは閏年を念頭に入れてのこと。さて……。
20080231
に、2月31日だとォ――!?
「うちゅうの ほうそくが みだれる!」
ここでの注意点は、月は0から始まること(1月は0)と、西暦から1900を引くことです。
何だ、驚かせやがって……*1。
use Time::Local; $year = 2008; $mon = 3; $mday = 1; $hours = 0; $min = 0; $sec = 0; $time = timelocal( $sec, $min, $hours, $mday, $mon-1, $year-1900 ); $time -= 60 * 60 * 24; # 60秒×60分×24時間 @a = localtime($time); printf( "%4d%02d%02d\n", $a[5]+1900, $a[4]+1, $a[3]);
20080229
足したり引いたりがめんどいのう。