Hitachi

JP1 Version 11 JP1/Advanced Shell 


8.4.7 dateコマンド(システムの日付と時刻を表示する)

形式

date[-u][-d 日時情報指定文字列 | -r 経過秒][+書式

機能

システムの日付と時刻を表示します。

引数

-u

--utc

--universal

UTC(世界協定時)の日付を表示します。

-d 日時情報指定文字列

--date=日時情報指定文字列

表示する日時を日時情報指定文字列で指定します。複数指定した場合は最後の指定が有効になります。指定できる日時情報指定文字列については,「-dオプションで指定できる日時情報指定文字列」を参照してください。

-r 経過秒

エポック(UTCの1970年1月1日00:00:00)から,経過秒に指定した時間が経過した日時を表示します。経過秒に指定できる値は,-10098756002147440447です。範囲外の値を指定した場合,出力する内容は保証できません。

+書式

日付と時刻の表示形式を書式指定コードで指定します。書式指定コードはOSのAPIであるstrftime関数の書式指定コードが指定できます。指定できる書式指定コードについては,「指定できる書式指定コード」を参照してください。

この引数を指定していない場合は,日付と時刻の表示形式は「%Y/%m/%d %A %H:%M:%S %Z」になります。

指定できる書式指定コード

+」で始まる引数には,OSのAPIであるstrftime関数の書式指定コードが指定できます。このOSのAPIであるstrftime関数で指定できる書式指定コードは,OSによって異なります。各OSで指定できる書式指定コードについては,各OSのstrftime関数についてのドキュメントを参照してください。

各OSのstrftime関数とJP1/Advanced Shell固有で共通して使用できる代表的な書式指定コードを次の表に示します。

書式指定コード

意味

%a

曜日の省略名

%A

曜日の正式名

%b

月の省略名

%B

月の正式名

%c

ロケールに対応する日付・時刻の表示

%d

10進数で表す月の日付(0131

%H

24時間表記で表す時間(0023

%I

12時間表記で表す時間(0112

%j

10進数で表す年の初めからの日数(001366

%m

10進数で表す月(0112

%M

10進数で表す分(0059

%p

現在のロケールの午前/午後

%S

10進数で表す秒。表示される値の範囲は,うるう秒への対応の違いから,OSによって異なる

%s

エポック(UTCの1970年1月1日00:00:00)からの経過秒数。

環境変数ADSH_CMDDATE_FORMATで指定がない場合,Linux,AIX,HP-UXで使用できる(strftime関数で処理する)。

環境変数ADSH_CMDDATE_FORMATで指定した場合,すべてのOSで使用できる(JP1/Advanced Shell固有の変換をする)。

%U

10進数で表す週の通し番号(0053)。その年の最初の日曜日を週の最初の日とする

%w

10進数で表す曜日(06,日曜日が0

%W

10進数で表す週の通し番号(0053)。その年の最初の月曜日を週の最初の日とする

%x

現在のロケールの日付の表示

%X

現在のロケールの時刻の表示

%y

10進数で表す西暦の下2桁(0099

%Y

10進数で表す4桁の西暦

%Z

タイムゾーン名。タイムゾーンが不明な場合は表示しない

%%

%(パーセント)記号

-dオプションで指定できる日時情報指定文字列

日時情報指定文字列には,dateコマンドで表示したい日時を次のように指定します。

日時情報指定文字列の要素は大文字でも小文字でも指定できます。UTCの1970年1月1日0時0分0秒より小さい値,または2038年1月19日3時14分7秒より大きい値を指定した場合,エラーメッセージ「date: Invalid date: 指定値」を出力し,エラー終了します。ただし,AIXの場合,ローカルのタイムゾーンの2038年1月19日3時14分7秒より大きい値を指定すると,エラーメッセージ「date: Invalid date: 指定値」を出力し,エラー終了します。また,日時情報指定文字列として空文字を指定した場合,現在の日付の0時0分0秒を表示します。

日時情報指定文字列はスペース区切りで指定します。ただし,文字,数字,符号の各種文字列で,異なる種類の文字列同士の場合はスペースなしで指定できます。例えば,文字と文字はスペースなしで指定できませんが,数字と文字など異なる種類の文字列同士の場合はスペースなしで指定できます。

日時情報指定文字列で指定できる要素と構文を次に示します。

「絶対日時の指定」および「相対日時の指定」は次の順序で算出されます。2.4.の途中で,秒に換算した結果が02147483647の範囲を超えた場合,最終結果に関係なくエラーになることがあります。

  1. 現在の日時,または「絶対日時の指定」で指定された日時を求めます。

  2. 1.に対して,「相対日時の指定」で指定された「曜日の移動」の結果を加算します。「絶対日時の指定」で「日付の指定」の指定がされた場合は,「曜日の移動」の指定があっても加算しません。

  3. 2.に対して,「相対日時の指定」で指定された「年・月の移動」のすべての結果を加算・減算します。

  4. 3.に対して,「相対日時の指定」で指定された「日の移動」,「時・分の移動」,「秒の移動」のすべての結果を加算・減算します。

2.4.は計算対象の日時からの移動分を計算します。

例えば,現在の日時が2014年4月30日10時10分10秒のときに「date -d "Fri, 1 year 1 month 1 day 1 hour 1 min 1 sec"」が指定された場合,次のように計算します。

1.で,現在の日時を求めます。

→2014年4月30日(水曜日)10時10分10秒になります。

2.で,2014年4月30日(水曜日)から次の金曜日までの日数を足します。

→2014年5月2日(金曜日)10時10分10秒になります。

3.で,365日と2014年の5月分の日数を足します。

→2015年6月2日(月曜日)10時10分10秒になります。

4.で,1日分の日数と,1時間1分1秒の時間を足します。

→2015年6月3日(火曜日)11時11分11秒になります。

日時情報指定文字列で複数の構文を組み合わせたときに注意が必要な指定

日時情報指定文字列で,「絶対日時の指定」および「相対日時の指定」を複数組み合わせたときに注意が必要な指定があります。

次に示すように,[YY]YYMMDDまたはhh[mm]の構文の後ろに符号付きの「相対日時の指定」を指定するとエラーになります。[YY]YYMMDDまたはhh[mm]の構文と符号付きの「相対日時の指定」を組み合わせて指定したい場合は,[YY]YYMMDDまたはhh[mm]を最後に指定してください。

C:\TEMP>date -d "20151112 -10 days"
date: Invalid date: 20151112 -10 days

C:\TEMP>date -d "-10 days 20151112"
2015/11/02 月曜日 00:00:00 JST

C:\TEMP>date -d "0955 -1 hours"
date: Invalid date: 0955 -1 hours

C:\TEMP>date -d "-1 hours 0955"
2016/09/28 水曜日 08:55:00 JST

文字,数字,符号の各種文字列で,異なる種類の文字列同士が隣り合う場合,スペースがあっても区切り文字として扱いません。このため,次の例の場合,「date -d "10-November-15 days"」と同じ解釈をして,2015年11月10日の1日後を表示します。後ろに指定する「相対日時の指定」の内容によって解釈が異なることがある「絶対日時の指定」を指定する場合は,「絶対日時の指定」を最後に指定してください。

C:\TEMP>date -d "10-November -15 days"
2015/11/11 水曜日 00:00:00 JST

次に示すように,hh:mm[:ss]およびSTの後ろに符号付きの数字を指定した場合,符号付きの数字は+hh[mm]または-hh[mm]と解釈します。このため,次の例の場合,UTC-10時間の12時11分10秒をJSTに変換した日時に対して1時間進めた日時を表示します。

C:\TEMP>date -d "20151110 12:11:10 -10 hours"
2015/11/11 水曜日 08:11:10 JST

JP1/Advanced Shell固有の共通書式指定コード

環境変数ADSH_CMDDATE_FORMATで指定した書式指定コードは,strftime関数を使用しないで,JP1/Advanced Shellが独自に編集します。これによって,OS間のstrftime関数の仕様差に影響されないで,共通の出力結果を得ることができます。

指定できる書式コードとその動作を次に示します。

環境変数ADSH_CMDDATE_FORMAT

JP1/Advanced Shell固有に,変換処理は環境変数ADSH_CMDDATE_FORMATで指定があったときだけ実行します。

環境変数名

指定値

ADSH_CMDDATE_FORMAT

s

環境変数ADSH_CMDDATE_FORMATsを指定した場合,エポック(UTCの1970年1月1日00:00:00)からの経過秒数を出力します。sを指定した場合は以降に示す共通書式処理の範囲の動作となります。

書式の形式

%[フラグ][フィールド幅]

フラグ~[ _ | - | 0 | ^ | # ]

_(アンダーバー)

数値の結果文字列のパディング(穴埋め)をスペース(空白文字)でします。

-(ハイフン)

数値の結果文字列をフィールドに左詰めに設定します。

フィールドの空きはスペース(空白文字)でパディングをします。

0

数値の結果文字列へのパディングを0でします。

^

結果文字列中のアルファベット文字を大文字に変換します。

ただし,書式指定コードsでは意味がないので無視します。

#

結果文字列の大文字・小文字を入れ替えます。

書式指定コードsでは意味がないので無視します。

フィールド幅

数値を出力するフィールドの幅を十進数で指定します。

パディングの指定がないときはスペース(空白文字)でパディングします。

書式の形式が正しくない場合は,この書式指定(当該書式の%からsまで)を文字として出力します。

終了コード

終了コード

意味

0

正常終了

1以上

エラー終了

注意事項

使用例