Windows環境で、WindowsコマンドやPowerShellを利用していると、日付や曜日、時刻などの情報を基にして処理を分岐させたりしたい場合があります。
そこで、ここではWindows10でWindowsコマンドやPowerShellを利用して、日付や曜日、時刻を取得するテクニックを紹介します。
目次
動作環境
この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。
ソフトウェア | バージョン |
---|---|
Windows10 Pro 64bit | 2004 |
日付
今日
Windowsコマンドで現在の日付を取得するときは、次のように実行します。
C:\> date /t
2020/07/14
区切り文字が不要なときは、次のように実行します。
C:\> echo %date:/=%
20200714
PowerShellで現在の日付を取得するときは、Get-Dateコマンドレットを利用します。
PS C:\> Get-Date
2020年7月14日 21:39:11
書式を指定すれば、さまざまな形式で日付を表示できます。
PS C:\> Get-Date -Format "yyyyMMdd"
20200714
日付の編集などを行うのであれば、ToStringメソッドで文字列形式に変換するのよいでしょう。
PS C:\> (Get-Date).ToString("yyyyMMdd")
20200714
n日前/n日後
Windowsコマンドでは、n日前やn日後の日付を取得するのは難しいですが、PowerShellならAddDaysメソッドを使って簡単に取得できます。
たとえば、1日前(昨日)の日付を取得したいときは、次のように実行します。
PS C:\> (Get-Date).AddDays(-1).ToString("yyyyMMdd")
20200713
1日後(明日)の日付を取得したいときは、次のように実行します。
PS C:\> (Get-Date).AddDays(1).ToString("yyyyMMdd")
20200715
曜日
Windowsコマンドでは、曜日を取得するのは難しいですが、PowerShellならGet-Dateコマンドレットで簡単に取得できます。
今日の曜日を取得する場合は、次のように実行します。
PS C:\> (Get-Date).ToString("ddd")
月
PS C:\> (Get-Date).ToString("dddd")
月曜日
PS C:\> (Get-Date).DayOfWeek
Monday
特定の日の曜日を取得する場合は、次のように実行します。
PS C:\> (Get-Date "2020/7/23").ToString("ddd")
木
PS C:\> (Get-Date "2020/7/23").DayOfWeek
Thursday
数値で曜日を取得する場合は、value__を使用します。(ダブルアンダースコアです)
PS C:\> (Get-Date).DayOfWeek.value__
1
PS C:\> (Get-Date "2020/7/23").DayOfWeek.value__
4
数値は、0が日曜日、1が月曜日、2が火曜日・・・6が土曜日となります。
時刻
現在時刻
Windowsコマンドで現在の時刻を取得するときは、次のように実行します。
C:\> time /t
22:06
区切り文字が不要なときは、次のように実行します。
C:\> echo %time:~0,2%%time:~3,2%
2206
秒までを表示したいときは、次のように実行します。
C:\> echo %time:~0,2%%time:~3,2%%time:~6,2%
220614
PowerShellで現在の時刻を取得するときは、次のように実行します。
PS C:\> Get-Date -Format "HH:mm:ss"
22:06:14
PS C:\> (Get-Date).ToString("HH:mm:ss")
22:06:14
n時間前/n時間後
Windowsコマンドでは、n時間前やn時間後を取得するのは難しいですが、PowerShellなら簡単です。
PowerShellで、n時間前やn時間後の日付を取得したいときは、AddHoursメソッドを利用して簡単に取得できます。
たとえば、1時間前の時刻を取得したいときは、次のように実行します。
PS C:\> (Get-Date).AddHours(-1).ToString("HHmmss")
210614
1時間後の時刻を取得したいときは、次のように実行します。
PS C:\> (Get-Date).AddHours(1).ToString("HHmmss")
230614
あとがき
ちなみに、PowerShellでしか取得できないような値を、バッチフィルで利用したいときは、以下に紹介している方法でバッチフィル内で取得できるようになります。
たとえば、前日日付をバッチファイル内で変数に格納したい場合は、次のようにバッチファイルを記述することで実現できます。
@echo off
set d=%~dp0
echo (Get-Date).AddDays(-1).ToString("yyyyMMdd") >%d%yesterday.ps1
for /f "tokens=1" %%i in ('powershell -NoProfile -ExecutionPolicy Unrestricted %d%yesterday.ps1') do set ymd=%%i
echo %ymd%