You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将任意时区的指定时间戳转换为UTC(含夏令时处理)

解决指定时区时间转UTC并自动适配夏令时的问题

问题根源

你的初始代码使用时区的BaseUtcOffset(基础UTC偏移)进行计算,但这个值不包含夏令时(DST)的动态偏移。比如2024年3月12日太平洋时区已经切换到夏令时(UTC-7),但BaseUtcOffset还是UTC-8,所以计算结果会偏差1小时。

正确实现方式

PowerShell的[TimeZoneInfo]类提供了自动处理夏令时的转换方法,无需手动计算偏移:

方法1:直接使用静态方法转换

$sourceTime = [datetime]::new(2024,3,12,10,0,0)
$sourceZone = [TimeZoneInfo]::FindSystemTimeZoneById('Pacific Standard Time')

# 自动适配夏令时的UTC转换
$utcTime = [TimeZoneInfo]::ConvertTimeToUtc($sourceTime, $sourceZone)
Write-Host 'UTC-time:' $utcTime

方法2:封装成可复用函数

如果需要频繁转换,可以写一个通用函数:

function Convert-ToUtc {
    param(
        [Parameter(Mandatory=$true)]
        [datetime]$SourceTime,
        [Parameter(Mandatory=$true)]
        [string]$SourceTimeZoneId
    )

    $timeZone = [TimeZoneInfo]::FindSystemTimeZoneById($SourceTimeZoneId)
    return [TimeZoneInfo]::ConvertTimeToUtc($SourceTime, $timeZone)
}

# 使用示例
$myTime = [datetime]::new(2024,11,3,10,0,0) # 太平洋时区夏令时结束后的时间
$myZone = 'Pacific Standard Time'
$utcResult = Convert-ToUtc -SourceTime $myTime -SourceTimeZoneId $myZone
Write-Host '转换后的UTC时间:' $utcResult

说明

  • [TimeZoneInfo]::ConvertTimeToUtc会自动根据传入的SourceTime判断该时区在对应时间是否处于夏令时,自动应用正确的偏移量。
  • 可以通过Get-TimeZone -ListAvailable查看系统支持的所有时区ID,确保传入的SourceTimeZoneId是有效的系统时区ID。

内容的提问来源于stack exchange,提问作者Carsten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:02:38