date(1)コマンドは現在時刻の出力やシステムの時刻の設定などに使われるが、フォーマットを変更して日付を出力したり、任意の日付文字列を別の任意の形式へ変換したり、1週間後や20日後といった指定で日付を出力するといった処理にも利用できる。
IEEE Std 1003.1 "POSIX.1"に記載されているdate(1)コマンドの規約はフォーマット指定と-uオプションのみで、ほかのオプションは規定されていない。このため、BSD date(1)とGNU Core Utilities date(1)ではオプションが大きく異なっている。ここではGNU date(1)で使われるオプションのうち特に便利なものを紹介する。
GNU date(1)では-dオプションを指定することで日付データをさまざまな値へ設定したり変更できる。一般的な日付表記で日付を指定して値を設定できるほか、現在時刻を基軸にして時間を進めたり戻したりといった指定を行うことができる。
なお、GNU date(1)では数字の前に@を指定すると、その数字はUNIX時間(1970年1月1日0時0分0秒からの経過秒数)として扱われるようになる。BSD dateではフォーマット%sがUNIX時間の指定に使われる。
$ date 2012年 4月 23日 月曜日 21:25:30 JST $
$ date -d "5 years ago" 2007年 4月 23日 月曜日 21:27:36 JST $
$ date -d "1 year ago 6 months ago 45 minutes" 2010年 10月 23日 土曜日 22:18:27 JST $
-dオプションを使用すると、例えば本日から向こう20日間の日付けリストを作成するといった処理を実施できる。
$ i=$(date "+%Y%m%d") $ for j in $(seq 20) > do > echo $i > i=$(date -d "${i} 1 day" "+%Y%m%d") > done 20120423 20120424 20120425 20120426 20120427 20120428 20120429 20120430 20120501 20120502 20120503 20120504 20120505 20120506 20120507 20120508 20120509 20120510 20120511 20120512 $
日付フォーマットの変更や、特定の日付データの生成はさまざまな場面で重要になる機能のひとつ。
date(1)コマンドで使用できるIEEE Std 1003.1 "POSIX.1"規定のフォーマットに関してはdateコマンドのフォーマット一覧 : IEEE Std 1003.1 "POSIX.1"を参照のこと。BSD date(1)に関してはdateコマンドの便利な使い方 : BSD dateを参照のこと。