PowerShellで特定のUTCタイムスタンプを持つDateTime
オブジェクトを作成しようとしています。これを行う最も簡単な方法は何ですか?
私は試した:
Get-Date
-Format (Get-Culture).DateTimeFormat.UniversalSortableDateTimePattern
-Date "1970-01-01 00:00:00Z"
しかし、私はこの出力を取得します:
1969-12-31 19:00:00Z
数時間オフです。私の理解の失Whereはどこですか?
DateTime
オブジェクト自体は、適切なUTC時間で作成されています。しかし、PowerShellが出力すると、それを現地の文化とタイムゾーンに変換するため、違いが生じます。
証明:
$UtcTime = Get-Date -Date "1970-01-01 00:00:00Z"
$UtcTime.ToUniversalTime()
(get-date).ToUniversalTime().ToString("yyyyMMddTHHmmssfffffffZ")
$utctime = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc)
印刷する場合$utctime
、その後あなたは得る:
1. januar 1970 00:00:00
また、$utctime.Kind
はUtc
に正しく設定されています。
$time = [DateTime]::UtcNow | get-date -Format "yyyy-MM-ddTHH:mm:ssZ"
これも動作するようです
SpecifyKindメソッドを使用できます。
PS C:\ IT\s3> $ timestamp
2018年7月18日水曜日午後7時57分14秒
PS C:\ IT\s3> $ timestamp.kind
不特定
PS C:\ IT\s3> $ utctimestamp = [DateTime] :: SpecifyKind($ timestamp、[DateTimeKind] :: Utc)
PS C:\ IT\s3> $ utctimestamp
2018年7月18日水曜日午後7時57分14秒
PS C:\ IT\s3> $ utctimestamp.kind
UTC
これが.NETでの動作です。 PowerShellは、ToUniversalTimeメソッドを呼び出すだけです。から http://msdn.Microsoft.com/en-us/library/system.datetime.touniversaltime.aspx
The Coordinated Universal Time (UTC) is equal to the local time minus the
UTC offset. For more information about the UTC offset, see TimeZone.GetUtcOffset.
The conversion also takes into account the daylight saving time rule that applies
to the time represented by the current DateTime object.