我需要一个函数,将给定时区中的任何给定时间戳转换为 UTC。 我一开始使用源时区的 UTC 偏移量,但后来发现,这并不总是正确的,因为它不尊重包括/不包括夏令时 (DST) 偏移量的单独偏移量。这里的问题是,许多时区的夏令时开始/结束日期不同。我该如何解决这个问题,以便它适用于任何时间戳和任何时区?
这是我在不考虑夏令时的情况下编写的初始 Powershell 代码:
$sourceTime = [datetime]::new(2024,3,12,10,0,0)
$sourceZone = 'Pacific Standard Time'
$utcOffset = (Get-TimeZone -Id $sourceZone).BaseUtcOffset
write-host 'UTC-time:' ($sourceTime - $utcOffset)
TimeZoneInfo.ConvertTimeToUtc
方法。
但您应该注意,由于 DST 更改,以本地日期/时间表示的值可能无效或不明确。 (例如,太平洋时间的值 2024-03-10T02:30 无效,因为时钟从凌晨 2 点前进到凌晨 3 点。)您可以使用
IsAmbiguousTime
和 IsInvalidTime
方法检测到这一点。