我正在尝试DateTime
在 PowerShell 中创建一个具有特定 UTC 时间戳的对象。最简单的方法是什么?
我试过了:
Get-Date
-Format (Get-Culture).DateTimeFormat.UniversalSortableDateTimePattern
-Date "1970-01-01 00:00:00Z"
但我得到这个输出:
1969-12-31 19:00:00Z
休息几个小时。我的理解失误在哪里?
我正在尝试DateTime
在 PowerShell 中创建一个具有特定 UTC 时间戳的对象。最简单的方法是什么?
我试过了:
Get-Date
-Format (Get-Culture).DateTimeFormat.UniversalSortableDateTimePattern
-Date "1970-01-01 00:00:00Z"
但我得到这个输出:
1969-12-31 19:00:00Z
休息几个小时。我的理解失误在哪里?
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> $时间戳
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
世界标准时间
这就是它在 .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.