在PowerShell中使用特定的UTC DateTime创建DateTime对象

M. *_*ley 27 powershell datetime utc

我正在尝试DateTime在PowerShell中创建具有特定UTC时间戳的对象.最简单的方法是什么?

我试过了:

Get-Date
    -Format (Get-Culture).DateTimeFormat.UniversalSortableDateTimePattern
    -Date "1970-01-01 00:00:00Z"
Run Code Online (Sandbox Code Playgroud)

但我得到这个输出:

1969-12-31 19:00:00Z
Run Code Online (Sandbox Code Playgroud)

这是几个小时的休息时间.我的理解失误在哪里?

M. *_*ley 33

DateTime对象本身正在用正确的UTC时间创建.但是,当PowerShell将其打印出来时,它会将其转换为我当地的文化和时区,从而产生差异.

证明:

$UtcTime = Get-Date -Date "1970-01-01 00:00:00Z"
$UtcTime.ToUniversalTime()
Run Code Online (Sandbox Code Playgroud)

  • `Get-Date`将给定的UTC时间转换为本地时间,并将其作为`date`对象存储,其中`Kind`设置为`Local`.它确实存储了正确的物理时间点,但它是当地时间,将在当地时间打印.请注意,这仍然是问题的正确答案.OP没有特别要求用类型UTC创建`datetime`对象.Upvoted. (2认同)

小智 16

(get-date).ToUniversalTime().ToString("yyyyMMddTHHmmssfffffffZ")
Run Code Online (Sandbox Code Playgroud)

  • ToString值应该支持24小时,所以它应该有大写HH:`.ToString("yyyyMMddTHHmmssfffffffZ")`例如.因为UTC与时区无关,所以02:00:00 PM应该成为..140000 (2认同)

小智 8

$time = [DateTime]::UtcNow | get-date -Format "yyyy-MM-ddTHH:mm:ssZ"
Run Code Online (Sandbox Code Playgroud)

这似乎也有效


Flo*_*ter 7

$utctime = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc)
Run Code Online (Sandbox Code Playgroud)

如果你打印出来$utctime,那么你得到:

1. januar 1970 00:00:00
Run Code Online (Sandbox Code Playgroud)

此外,$utctime.Kind正确设置为Utc.


小智 5

您可以使用指定种类方法:

PS C:\IT\s3> $时间戳

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

世界标准时间