このページの本文へ

前へ 1 2 次へ

Windows Info 第347回

PowerShellで任意の日付を計算する

2022年10月02日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 コンピュータの前にずっと座っていると、ときどき時間の感覚が鈍くなって、「はて、今日は何日だったか」なんて考えることがある。今ではPCで簡単に時刻やカレンダーを見ることができる。端末からコンピューターを使っていた時代なら、日付やカレンダーを表示するコマンドがあった。

 単純に今の日付や時刻、カレンダーがわかっても、たとえば「160日後に失効します」なんて通知が表示されたとき、その日を計算するのは面倒だ。Windowsの電卓には、「日付の計算」があるが、スタートメニューを開いて、電卓を起動、切り替えて数値を入力というのも手間である。コンピューターなんだから、日付の計算ぐらい簡単に済ませたい。

Windows 10/11標準の電卓には日数計算の機能はあるが、「2つの日付の差」と「日付の加算、減算」しか計算できない

 この連載の今年最初の記事(「PowerShellでWindowsが起動してからの時間を計算する」)で、Windowsの起動時間をPowerShellで計算する方法を紹介したが、日付に関してはきちんと説明してなかった。そこで今回は、Get-Dateコマンドと日付の計算をする方法を解説する。

コマンドラインで日付を得る

 cmd.exeには、日付の計算機能が標準では備わっていないので、ここではWindows PowerShellを使う(PowerShellでも同じ)。まずは今日の日付だが、これは「Get-Date」コマンドで表示できる。なお、Get-Dateは、Dateと略すことも可能だ(ただし、Date.exeなどがPathに存在しない場合)。

 Get-Dateだけを実行すると、現在の日時が表示されるが、これは、「設定」→「時刻と言語」→「言語と地域」→「地域設定」にある「日付(長い形式)」による表示。設定を変更すれば、他の形式でも可能だ。

 この形式、以前のWindowsでは、書式指定文字で指定できたのだが、現在はいくつかのパターンから選ぶようになっている。長くはなるが、できれば曜日も表示させたい。パターンから選んでもいいが、書式指定がわかるなら、レジストリで好みのパターンに変更できる。現在設定されている「日付(長い形式)」は、

get-ItemProperty 'HKCU:\Control Panel\International\' slongDate

で表示できる。

get-dateは標準では、曜日を表示しないが「設定」→「時刻と言語」→「言語と地域」→「地域設定」にある「日付(長い形式)」の書式を変更することで曜日を表示できるようになる。また、レジストリを操作すると、より細かく書式の設定が可能

 たとえば、「2022年10月2日 10時00分 日曜日」のようなパターンにしたいのであれば、

Set-ItemProperty 'HKCU:\Control Panel\international' -name sLongDate -Value "yyyy'年'MM'月'dd'日 'dddd"

とする。これでget-dateを実行すると、曜日が表示されるようになる(PowerShellは再起動が必要)。

 以後の解説では、この形式であることを前提にしている。なお、一部のアプリケーションは、日付文字列が長すぎると表示がおかしくなったり、落ちてしまうというヒドイ作りになっていることがある。変更はご自身のリスクで実行してほしい。

 なお、英語表記でもよければ、前記のレジストリ設定を行わなくても「get-date -Format 'r'」で、RFC1123形式が出力され、先頭に曜日がある。

 get-dateコマンドの「-Format」オプションには、日付書式文字を指定できる。これは、.NET Frameworkと同じで、標準では下の表のような表示パターンが指定できる。

 なお、細かく書式を指定するときには「カスタム日時指定文字列」を使う。これについては、以下に解説がある。

●カスタム日時形式文字列
 https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings

続いては任意の日付を得る

 get-dateは、そのままでは現在日時を返すが、特定の日時を指定したいこともあるだろう。たとえば、「2022年1月1日」を指定する場合、簡単な方法として、

get-date '2022/1/1'

とする。シングルクオートの中の書式は意外に自由が利く。たとえば'2022年1月1日'でもいいし、'1 Jan 2022'でもいい。1月1日なら実は'2022年'だけでもよいが'2022'ではエラーになる。文字列の場合、省略された部分があるとき、月や日付なら1が、時刻なら0が仮定される。

 もう1つは、get-dateのオプションを指定する方法がある。get-dateには表のような日付、時刻指定のオプションがあり、これで日時を指定できる。

 なお、矛盾がなければ、文字列による日時指定とオプションによる日時指定は混在できる。たとえば、「2022年8月1日」の午前3時は、

get-date '2022/8/1' -Hour 3

と指定できる。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン