[FAQ CENTER トップ]
[Powershell FAQ トップへ]



【Powershell】日付と日付の引き算を行うサンプルプログラム



更新日:2020/08/20


このページでは Windows 10 環境における日付と日付の間の日数を求めるサンプルプログラムを紹介します。
大きく分けて次の2通りの方法があります。

TimeSpanを使用する


TimeSpan 型とは文字通り時刻と時刻の差を表す型です。DateTime型とDateTime型の引き算を実行すると、結果が TimeSpan 型で戻されます。
Powershell では引き算して日付の差分の計算が可能です。

DateTime クラス


日付の足し算を行うメソッドがDateTime クラスに多数用意されています。引数にマイナスを指定すれば引き算となります。
Powershell のDateTime クラスでは以下のようなメソッドが用意されています。これで簡単に計算が可能です。

addYears ・・・ 年を追加
addMonths ・・・ 月を追加
addDays ・・・ 日付を追加
addHours ・・・ 時間を追加
addMinutes ・・・ 分を追加
addSeconds ・・・ 秒を追加

サンプルコード集

以下は Windows 10 環境におけるサンプルコードと実行結果です。


以下の例では 20200820 (2020年8月20日) と 20200701 (2020年7月1日) の間の日数を計算しています。
DateTime型に変換した後引き算しています。引き算の結果は TimeSpan 型で戻されます。日数を取得するには Days プロパティにアクセスします。


サンプルコード:


$before = [DateTime]::ParseExact("20200701","yyyyMMdd", $null);
$after = [DateTime]::ParseExact("20200820","yyyyMMdd", $null);

$TimeSpan= ($after - $before)

$TimeSpan.Days
$TimeSpan.Hours
$TimeSpan.Minutes
$TimeSpan.Seconds


実行結果:

50
0
0
0





次の例では2020年8月20日 18時12分5 秒と 2020年8月21日 20時13分15秒 との差を求めています。
差は1日2時間1分10秒です。
TimeSpanの各プロパティで計算されていることが分かります。

サンプルコード:


$before = [DateTime]::ParseExact("20200820 18:12:05","yyyyMMdd HH:mm:ss", $null);
$after = [DateTime]::ParseExact("20200821 20:13:15","yyyyMMdd HH:mm:ss", $null);

$TimeSpan= ($after - $before)

$TimeSpan.Days
$TimeSpan.Hours
$TimeSpan.Minutes
$TimeSpan.Seconds


実行結果:

1
2
1
10




2020年8月20日 18時0分0秒 に 1時間30分を足しています。
TimeSpan により 1時間30分を作成し引き算することにより計算しています。

サンプルコード:


$before = [DateTime]::ParseExact("20200820 18:00:00","yyyyMMdd HH:mm:ss", $null);

$TimeSpan = New-TimeSpan "00:01:30" "00:00:00"

write-host ($before - $TimeSpan)



実行結果:

2020/08/20 18:01:30





2020年8月20日 18時0分0秒 に 1時間30分を足しています。
今度は単純に AddHours と AddMinutes を使用しています。


サンプルコード:


$before = [DateTime]::ParseExact("20200820 18:00:00","yyyyMMdd HH:mm:ss", $null);

$before = $before.Addhours(1)
$before = $before.AddMinutes(30)

write-host $before

実行結果:

2020/08/20 19:30:00





DateTime を String 型に変換するにはToString を使用します。
次のサンプルは明日の日付を文字列型で出力しています。

サンプルコード:


$tomorrow = ((Get-Date).AddDays(1)).ToString(“yyyy/MM/dd”)

write-host $tomorrow

$tomorrow.GetType()


実行結果:

2020/08/21

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object










[Powershell FAQ トップへ]
[FAQ CENTER トップ]


本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。) Copyright(c) tooljp.com 2007-2018