Release: 2005/07/03
Update: 2007/07/18
UNIX & Linux コマンド・シェルスクリプト リファレンス > 日付を取得する
date -d '1 days ago'
→ 「-d 'N days ago'」で N 日前の日付を取得できる。
Linux では拡張された date コマンドが使用できるので、簡単に過去の日付を取得できる。
$ date 2007年 6月 2日 土曜日 23:05:20 JST ※↑そのまま実行すると当日の日時が表示される。 $ date -d '1 days ago' 2007年 6月 1日 金曜日 23:05:31 JST ※↑1日前を指定すると、現在日時から24時間前の日時が表示される。
TZ=JST+15 date
→ 一時的に環境変数 TZ を変更した上で date コマンドを実行する。
古い UNIX マシンなどでは、「GNU date」が使用できない場合が多い。 そういった環境では、一時的にタイムゾーンを変更して date コマンドを実行することで、昨日の日付を取得することができる。
$ echo $TZ JST-9 ※↑デフォルトのタイムゾーン。 $ date Sun Jun 26 03:38:04 2005 ※↑date コマンドを普通に実行すると今日の日付。 $ TZ=JST+15 date Sat Jun 25 03:39:03 2005 ※↑環境変数 TZ を変更して date コマンドを打つと昨日の日付。 $ echo $TZ JST-9 ※↑実行後もタイムゾーンはデフォルトのまま。
参考 〜 一時的に変数を設定
コマンド実行時に TZ=JST+15 date +%m/%d/%Y のように同一行で変数の設定を行うことで、
そのコマンドに対してのみ有効になるよう変数を設定することができる。
この場合は「;」(セミコロン)で区切ってはいけない。
「;」(セミコロン)で区切る場合は、( TZ=JST+15; date +%m/%d/%Y ) のように「()」(小括弧)で囲む必要がある。
date -d '1 days'
→ 「-d 'N days'」で N 日後の日付を取得できる。
Linux では拡張された date コマンドが使用できるので、前述の昨日の日付と同様に、簡単に過去の日付を取得できる。
TZ=JST-33 date
→ 一時的に環境変数 TZ を変更した上で date コマンドを実行する。
GNU date が使用できない場合も、前述の昨日の日付と同様に、環境変数 TZ を一時的に変更することにより取得することが可能である。
date '+フォーマット'
→ "+" を先頭に付け、日時の各情報を表す記号でフォーマットを指定する。
フォーマットの指定には「年」「月」「日」「時」「分」などを表す特殊な書式を使用する。
| 取得する情報 | 書式 |
|---|---|
| 1970/01/01 00:00:00 からの経過秒 | %s |
| 年(西暦4桁) | %Y |
| 年(西暦下2桁) | %y |
| 月(01〜12) | %m |
| 月(Jan〜Dec) | %b |
| 月(January〜December) | %B |
| 日(01〜31) | %d |
| 日( 1〜31) ※空白含む2桁 | %e |
| 曜日(Sun〜Sat) | %a |
| 曜日(Sunday〜Saturday) | %A |
| 曜日(0〜6) ※0は日曜日 | %w |
| 時(00〜23) | %H |
| 時(01〜12) | %I |
| 時( 0〜23) ※空白を含む2桁 | %k |
| 時( 1〜12) ※空白を含む2桁 | %l |
| 分(00〜59) | %M |
| 秒(00〜59) | %S |
| AM/PM | %p |
| am/pm | %P |
| 改行 | %n |
フォーマットを指定して日時を表示するには、以下のようにパラメータを指定して date コマンドを実行する。
| フォーマット | コマンド |
|---|---|
| yyyy/mm/dd | date '+%Y/%m/%d' |
| yyyy/mm/dd (Sun..Sat) | date '+%Y/%m/%d(%a)' |
| yy/mm/dd | date '+%y/%m/%d' |
| yyyy-mm-dd | date '+%F' |
| mm/dd/yy | date '+%D' |
| hh:mm (24時間制) | date '+%R' |
| hh:mm:ss (24時間制) | date '+%T' |
| hh:mm:ss AM|PM (12時間制) | date '+%r' |
実際にコマンドを実行してみる。実行した日時は2005年9月11日午前1時18分頃である。
$ date '+%Y/%m/%d'
2005/09/11
$ date '+%Y/%m/%d(%a)'
2005/09/11(Sun)
$ date '+%y/%m/%d'
05/09/11
$ date '+%F'
2005-09-11
$ date '+%D'
09/11/05
$ date '+%R'
01:18
$ date '+%T'
01:18:01
$ date '+%r'
01:18:06 AM
$ date '+%Y/%m/%d%n%r'
2005/09/11
01:18:27 AM
※↑%n を使用することで、出力に改行を含めることができる。
他にも表示できる情報はあるが、通常の用途ならこれらの情報のみで十分であろう。
※ 以下、GNU date コマンドが使用可能であることを前提とする。
現在日時から指定した時間分の過去・未来の日時を求める。
# 現在日時から10秒前の日時を求める date -d '10 seconds ago' # 現在日時から10秒後の日時を求める date -d '10 seconds' # 現在日時から10分前の日時を求める date -d '10 minutes ago' # 現在日時から10分後の日時を求める date -d '10 minutes' # 現在日時から10時間前の日時を求める date -d '10 hours ago' # 現在日時から10時間後の日時を求める date -d '10 hours' # 現在日時から10日前の日時を求める date -d '10 days ago' # 現在日時から10日後の日時を求める date -d '10 days' # 現在日時から10ヶ月前の日時を求める date -d '10 months ago' # 現在日時から10ヶ月後の日時を求める date -d '10 months' # 現在日時から10年前の日時を求める date -d '10 years ago' # 現在日時から10年後の日時を求める date -d '10 years' # 上記のコマンドはそれぞれフォーマットを指定して実行することも可能 date -d '12 hours ago' '+%Y-%m-%d [%H:%M:%S]'
date コマンドで表示される日時を現在日時ではなく、次のように指定した日時で date コマンドを実行することもできる。
# 現在日時を「2006/01/01 12:13:14」としてコマンドを実行する date -d '2006/01/01 12:13:14' # フォーマットの指定も可能 date -d '2006/01/01 12:13:14' '+%Y %m %d - %H %M %S'
→ date コマンドに日時を指定すると、現在日時ではなく指定した日時で結果が表示される。
さらに特定の日時から、指定した時間分の過去・未来の日時を求めることもできる。
date -d '2006/01/01 12:13:14 1 months ago' # フォーマットの指定も可能 date -d '2006/01/01 12:13:14 1 months ago' '+%Y %m %d - %H %M %S'
ログファイルなどから取得した日付を、どちらが古い、 もしくは新しい日付であるか比較したい場合は次のようにする。
date_comparison.sh
#/bin/bash # 1970-01-01 00:00:00 からの経過秒に変換する DATE_1=`date -d "$1" '+%s'` DATE_2=`date -d "$2" '+%s'` # 2つの日付を表示しておく echo "DATE 1: $1" echo "DATE 2: $2" # 2つの日付を比較し、結果を表示する if [ $DATE_1 -eq $DATE_2 ]; then echo "指定された2つの日付は同一日時です。" elif [ $DATE_1 -gt $DATE_2 ]; then echo "DATE 1 の方が新しい日付です。" elif [ $DATE_1 -lt $DATE_2 ]; then echo "DATE 2 の方が新しい日付です。" fi exit 0
このシェルスクリプト date_comparison.sh の実行結果は、以下の通りとなる。
$ ./date_comparison.sh "2006/01/01 00:00:00" "2006/01/01 00:00:00" DATE 1: 2006/01/01 00:00:00 DATE 2: 2006/01/01 00:00:00 指定された2つの日付は同一日時です。 $ ./date_comparison.sh "2006/01/01 00:00:01" "2006/01/01 00:00:00" DATE 1: 2006/01/01 00:00:01 DATE 2: 2006/01/01 00:00:00 DATE 1 の方が新しい日付です。 $ ./date_comparison.sh "2006/01/01 00:00:00" "2006/01/01 00:00:01" DATE 1: 2006/01/01 00:00:00 DATE 2: 2006/01/01 00:00:01 DATE 2 の方が新しい日付です。
日付は date コマンドのフォーマット指定で '+%s' を使用することにより、 「1970-01-01 00:00:00」からの経過秒に変換する。 これによって、日付の比較を単純な数値の比較とすることができる。 つまり秒に変換してあるので、新しい日付の方が大きい数値ということになる。
ちなみに、'+%s' を使用した date コマンドの実行結果は以下のようになる。
$ date -d '2006/01/01 00:00:00' '+%s' 1136041200 $ date -d '2006/01/01 00:00:01' '+%s' 1136041201

Copyright© SUNONE All Rights Reserved.