Windowsで日付・曜日・時刻をコマンドで取得、計算する方法

Windowsで日付・曜日・時刻をコマンドで取得、計算する方法

Windows環境で、WindowsコマンドやPowerShellを利用していると、日付や曜日、時刻などの情報を基にして処理を分岐させたいときがあります。

そこでここでは、Windows 10でWindowsコマンドやPowerShellを利用して、日付や曜日、時刻を取得するテクニックを紹介します。

日付を取得する

今日

Windowsコマンドで現在の日付を取得するときは、次のように実行します。

> date /t
2020/07/14

区切り文字が不要なときは、次のように実行します。

> echo %date:/=%
20200714

PowerShellで現在の日付を取得するときは、Get-Dateコマンドレットを利用します。

PS> Get-Date
2020年7月14日 21:39:11

書式を指定すれば、さまざまな形式で日付を表示できます。

PS> Get-Date -Format "yyyyMMdd"
20200714

日付の編集などを行うのであれば、ToStringメソッドで文字列形式に変換するのよいでしょう。

PS> (Get-Date).ToString("yyyyMMdd")
20200714

n日前/n日後

Windowsコマンドでは、n日前やn日後の日付を取得するのは難しいですが、PowerShellならAddDaysメソッドを使って簡単に取得できます。

たとえば、1日前(昨日)の日付を取得したいときは、次のように実行します。

PS> (Get-Date).AddDays(-1).ToString("yyyyMMdd")
20200713

1日後(明日)の日付を取得したいときは、次のように実行します。

PS> (Get-Date).AddDays(1).ToString("yyyyMMdd")
20200715

月末

PowerShellのAddDaysやAddMonthメソッドを使えば、月末を取得することもできます。

たとえば、今月末の日付を取得したいときは、翌月1日の前日の日付を求めることで実現できます。

PS> (get-date -day 1).AddMonths(1).AddDays(-1).ToString("yyyyMMdd")
20200731

曜日を取得する

Windowsコマンドでは、曜日を取得するのは難しいですが、PowerShellならGet-Dateコマンドレットで簡単に取得できます。

今日の曜日を取得する場合は、次のように実行します。

PS> (Get-Date).ToString("ddd")
月
PS> (Get-Date).ToString("dddd")
月曜日
PS> (Get-Date).DayOfWeek
Monday

特定の日の曜日を取得する場合は、次のように実行します。

PS> (Get-Date "2020/7/23").ToString("ddd")
木
PS> (Get-Date "2020/7/23").DayOfWeek
Thursday

数値で曜日を取得する場合は、value__を使用します。(ダブルアンダースコアです)

PS> (Get-Date).DayOfWeek.value__
1
PS> (Get-Date "2020/7/23").DayOfWeek.value__
4

数値は、0が日曜日、1が月曜日、2が火曜日・・・6が土曜日となります。

時刻を取得する

現在時刻

Windowsコマンドで現在の時刻を取得するときは、次のように実行します。

> time /t
22:06

区切り文字が不要なときは、次のように実行します。

> echo %time:~0,2%%time:~3,2%
2206

秒までを表示したいときは、次のように実行します。

> echo %time:~0,2%%time:~3,2%%time:~6,2%
220614

PowerShellで現在の時刻を取得するときは、次のように実行します。

PS> Get-Date -Format "HH:mm:ss"
22:06:14
PS> (Get-Date).ToString("HH:mm:ss")
22:06:14

n時間前/n時間後

Windowsコマンドでは、n時間前やn時間後を取得するのは難しいですが、PowerShellなら簡単です。

PowerShellで、n時間前やn時間後の日付を取得したいときは、AddHoursメソッドを利用して簡単に取得できます。

たとえば、1時間前の時刻を取得したいときは、次のように実行します。

PS> (Get-Date).AddHours(-1).ToString("HHmmss")
210614

1時間後の時刻を取得したいときは、次のように実行します。

PS> (Get-Date).AddHours(1).ToString("HHmmss")
230614

あとがき

ちなみに、PowerShellでしか取得できない値を、バッチフィルで利用したいときは、以下に紹介している方法でバッチフィル内で取得できるようになります。

たとえば、前日日付をバッチファイル内で扱いたいときは、次のようにバッチファイルを記述することで実現できます。

echo (Get-Date).AddDays(-1).ToString("yyyyMMdd") >yesterday.ps1
for /f "tokens=1" %%i in ('powershell -NoProfile -ExecutionPolicy Unrestricted yesterday.ps1') do set ymd=%%i
echo %ymd%

上のバッチファイルでは、前日日付を出力するPowerShellスクリプトを作成し、それを実行することで前日日付を取得しています。