web-dev-qa-db-ja.com

PowerShellで特定のUTC DateTimeを使用してDateTimeオブジェクトを作成する

PowerShellで特定のUTCタイムスタンプを持つDateTimeオブジェクトを作成しようとしています。これを行う最も簡単な方法は何ですか?

私は試した:

Get-Date
    -Format (Get-Culture).DateTimeFormat.UniversalSortableDateTimePattern
    -Date "1970-01-01 00:00:00Z"

しかし、私はこの出力を取得します:

1969-12-31 19:00:00Z

数時間オフです。私の理解の失Whereはどこですか?

24
M. Dudley

DateTimeオブジェクト自体は、適切なUTC時間で作成されています。しかし、PowerShellが出力すると、それを現地の文化とタイムゾーンに変換するため、違いが生じます。

証明:

$UtcTime = Get-Date -Date "1970-01-01 00:00:00Z"
$UtcTime.ToUniversalTime()
30
M. Dudley
(get-date).ToUniversalTime().ToString("yyyyMMddTHHmmssfffffffZ")
16
Ryker Abel
$utctime = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc)

印刷する場合$utctime、その後あなたは得る:

1. januar 1970 00:00:00

また、$utctime.KindUtcに正しく設定されています。

7
Florian Winter
$time = [DateTime]::UtcNow | get-date -Format "yyyy-MM-ddTHH:mm:ssZ"

これも動作するようです

4
user8691702

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

1
hotch

これが.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. 
0
Shay Levy