IT系/リファレンス/DOSコマンド/date

Last-modified: 2023-04-23 (日) 15:08:17

date

日付の表示と設定を行うコマンド。

用例

  • 現在日付を表示(新しい日付の入力を促される。変更しない場合は[Enter]を押下。)
    date
  • 現在日付を表示(新しい日付の入力は促されない。)
    date /t
  • 現在日付を「2023年1月1日」に変更
    date 2023/01/01
  • 現在日付を表示(yyyy/MM/dd形式)
    echo %date%
  • 現在日付を表示(yyyyMMdd形式)
    echo %date:/=%
  • 現在日付の年を表示
    echo %date:~0,4%
  • 現在日付の月を表示
    echo %date:~5,2%
  • 現在日付の日を表示
    echo %date:~8,2%
  • 現在日時(yyyy/MM/dd hh:mi:ss.ff)を表示
    echo %date% %time%
  • 現在日時をyyyyMMddhhmiss形式で表示
    set tmptime=%time: =0%
    echo %date:/=%%tmptime:~0,2%%tmptime:~3,2%%tmptime:~6,2%

書式

date [/t | <month-day-year>]

options

<month-day-year>指定された日付を設定します。ここで、month は月 (1 から 12 の値を含む 1 桁または 2 桁の数字)、day は日 (1 から 31 の値を含む 1 桁または 2 桁の数字)、および year は年 (00 から 99 または 1980 から 2099 の値を含む 2 桁または 4 桁の数字) です。 month、day、および year の値はピリオド (.)、ハイフン (-)、またはスラッシュ (/) で区切る必要があります。
/t新しい日付の入力を促さずに、現在の日付を表示。
/?コマンドのヘルプを表示。

説明

  • 日付の表示と設定を行うコマンド。日付の表示形式は「yyyy/MM/dd」形式。
  • 現在日付の変更は管理者権限が必要。
  • 年を2桁で指定する場合、00~79:20XX年、80~99:19XX年と判断される。
  • 書式は<month-day-year>となっているが、英語圏の書式。ロケールが日本語であれば、<year-month-day>の順序で良い。
  • [コントロールパネル]の[地域と言語](あるいは[地域と言語のオプション]、[地域のオプション])で、日本以外の地域を選択したり、あるいは日付と時刻の形式をデフォルトから別のものに変更していたりすると、書式の順序が変わるので注意。
  • 用例では、dateコマンドだけでなく、環境変数のdate変数から現在日付を取得、表示する方法も記載している。バッチ処理では、date変数を使う事が多い。
  • 変数の文字列の抽出/置換は、以下のような書式で行える(例のVの値は「ABCDEFGHIJKL」)。
    書式意味
    %V%変数Vの値全体「%V%」 ⇒ 「ABCDEFGHIJKL」
    %V:~m%m文字目から、最後まで「%V:~5%」 ⇒ 「FGHIJKL」
    %V:~m,n%m文字目から、n文字分「%V:~5,2%」 ⇒ 「FG」
    %V:~,n%先頭から、n文字分「%V:~,5%」 ⇒ 「ABCDE」
    %V:~m,-n%m文字目から、最後のn文字分を除いたもの「%V:~5,-2%」 ⇒ 「FGHIJ」
    %V:~-m%後ろからm文字目から、最後まで「%V:~-5%」 ⇒ 「HIJKL」
    %V:~-m,n%後ろからm文字目から、n文字分「%V:~-5,2%」 ⇒ 「HI」
    %V:~-m,-n%後ろからm文字目から、最後のn文字分を除いたもの「%V:~-5,-2%」 ⇒ 「HIJ」
    %V:s1=s2%文字列s1を文字列s2に置換する。s2を省略すると、s1の削除になる「%V:ABC=abc%」 ⇒ 「abcDEFGHIJKL」「%V:ABC=%」 ⇒ 「DEFGHIJKL」
    %V:*s1=s2%変数の先頭から文字列s1に一致する部分までをまとめて、文字列s2に置換する。s2を省略すると、一致した部分が削除される「%V:*DEF=12345%」 ⇒ 「12345GHIJKL」「%V:*DEF=%」 ⇒ 「GHIJKL」
  • バッチファイルでは、いったんdate変数を変数にコピーして使用するのがセオリー。date変数を都度参照している間に日付が変わってしまっても問題がないようにするため。
  • date変数実行直後に日付が変わるケースまで対応する場合は以下のように対処可能。
    rem 00時00分の場合は、日付が前日の可能性があるので再取得
    set dt=%date%& set tm=%time%
    if "%tm:~0,5%"==" 0:00" set dt=%date%
  • バッチファイルでは、1日前や1カ月前を計算して、変数にセットする簡単な方法はない。
  • 日付計算をする場合は、バッチファイルよりPowerShellを使用するほうが簡単。
    #yyyyMMdd形式の現在日付を表示
    (Get-Date).ToString("yyyyMMdd")
    #現在日付の前日をyyyyMMdd形式で表示
    (Get-Date).AddDays(-1).ToString("yyyyMMdd")
    #もしくは以下でも良い
    [DateTime]::Today.AddDays(-1).ToString("yyyyMMdd")
  • DOSからPowerShellの実行結果を変数に入れる方法で、前日を取得することは可能。
    REM コマンドプロンプトから直接実行する場合(YESTERDAY変数に前日がセットされる)
    for /f "tokens=*" %g in ('powershell -Command "(Get-Date).AddDays(-1).ToString('yyyyMMdd')"') do (set YESTERDAY=%g)
    REM バッチファイルに書く場合は、%g部分を%%gとする
    for /f "tokens=*" %%g in ('powershell -Command "(Get-Date).AddDays(-1).ToString('yyyyMMdd')"') do (set YESTERDAY=%%g)

関連

  • time

参考リンク

その他メモ

なにかあれば。