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スクリプトを作成し、それを実行することで前日日付を取得しています。