💬

PowerShellで日付操作をする

2023/01/11に公開

現在の日付を取得する

Get-Date     
#実行結果
DisplayHint : DateTime
Date        : 2023/01/11 0:00:00
Day         : 11
DayOfWeek   : Wednesday
DayOfYear   : 11
Hour        : 22
Kind        : Local
Millisecond : 974
Microsecond : 209
Nanosecond  : 900
Minute      : 33
Month       : 1
Second      : 58
Ticks       : 638090732389742099
TimeOfDay   : 22:33:58.9742099
Year        : 2023
DateTime    : 2023年1月11日 22:33:58

タイムゾーンを取得する

Get-TimeZone  
#実行結果
Id                         : Tokyo Standard Time
HasIanaId                  : False
DisplayName                : (UTC+09:00) 大阪、札幌、東京
StandardName               : 東京 (標準時)
DaylightName               : 東京 (夏時間)
BaseUtcOffset              : 09:00:00
SupportsDaylightSavingTime : False

文字列から日付型に変換する

[DateTime]::ParseExact("10-31-21 12:25:49","MM-dd-yy HH:mm:ss", $null);

2021年10月31日 12:25:49

日付型から文字列型に変換する

(Get-Date -Format "MM/dd/yy").ToString()

01/13/23

表示する日付の形式を変換する

Get-Date -Date "2016-03-31 20:40:51" -Format "yyyy/MM/dd HH:mm:ss"

2016/03/31 20:40:51

うるう年か判定する

[datetime]::IsLeapYear(2000)

True

番外編

年度を取得する

Function Get-Nendo([datetime]$evalDate = (Get-Date)) {
    [UInt32]$Year = $evalDate.Year
    [UInt32]$Month = $evalDate.Month
    if ($Month -lt 4) { return [UInt32]($Year - 1) } else { return [UInt32]($Year) }
}

日付型⇔エクセルのシリアル値

function ConvertTo-XlsxDateSerial ([datetime]$Date=(Get-Date)){
    [datetime]$stdDate=(Get-Date -Year 1900 -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0 -Millisecond 0).AddDays(-2)

    return [uint32]($Date - $stdDate).Days
}

function ConvertFrom-XlsxDateSerial ([parameter(mandatory=$true)][uint32]$serial){
    [datetime]$stdDate=(Get-Date -Year 1900 -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0 -Millisecond 0).AddDays(-2)

    return [datetime]$stdDate.AddDays($serial)
}

#ConvertTo-XlsxDateSerial Get-Date => 44939
#ConvertFrom-XlsxDateSerial 44939 => 2023年1月13日 0:00:00

Discussion