40

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

我试过了:

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

但我得到这个输出:

1969-12-31 19:00:00Z

休息几个小时。我的理解失误在哪里?

4

6 回答 6

46

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

证明:

$UtcTime = Get-Date -Date "1970-01-01 00:00:00Z"
$UtcTime.ToUniversalTime()
于 2012-05-07T18:20:48.100 回答
23
(get-date).ToUniversalTime().ToString("yyyyMMddTHHmmssfffffffZ")
于 2013-09-11T19:10:29.327 回答
14
$utctime = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc)

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

1. januar 1970 00:00:00

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

于 2017-05-26T08:06:45.393 回答
8
$time = [DateTime]::UtcNow | get-date -Format "yyyy-MM-ddTHH:mm:ssZ"

这似乎也有效

于 2017-09-28T18:44:44.523 回答
3

您可以使用 SpecifyKind 方法:

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

世界标准时间

于 2018-07-19T15:39:38.383 回答
0

这就是它在 .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. 
于 2012-05-07T20:46:34.467 回答