如何将给定时区的任何时间戳转换为 UTC?

问题描述 投票:0回答:1

我需要一个函数,将给定时区中的任何给定时间戳转换为 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)
powershell timezone utc
1个回答
0
投票

使用

TimeZoneInfo.ConvertTimeToUtc
方法

但您应该注意,由于 DST 更改,以本地日期/时间表示的值可能无效或不明确。 (例如,太平洋时间的值 2024-03-10T02:30 无效,因为时钟从凌晨 2 点前进到凌晨 3 点。)您可以使用

IsAmbiguousTime
IsInvalidTime
方法检测到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.