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

PowerShell解析DNS时间戳时如何自动处理夏令时问题?

解决CSVDE导出DNS记录中dnsRecord时间戳的夏令时偏差问题

我正在解析CSVDE导出的DNS记录中的dnsRecord属性,该属性将时间戳存储为自1601年1月1日UTC午夜(00:00:00)起经过小时数的十六进制字符串。

使用以下代码解析时,夏令时段的结果出现偏差:

$dnsRecordTimestampBytes = '0038a293'
(Get-Date '01/01/1601Z').AddHours([int]('0x' + $dnsRecordTimestampBytes))

运行结果为03 June 2024 11:00:00,但正确结果应为03 June 2024 12:00:00。

而在非夏令时段,解析结果符合预期:

$dnsRecordTimestampBytes = '00389c04'
(Get-Date '01/01/1601Z').AddHours([int]('0x' + $dnsRecordTimestampBytes))

得到的25 March 2024 12:00:00与预期一致。

请问是否存在无需手动判断夏令时起止区间的修复方法?


修复方法:将UTC时间转换为本地时区时间

问题根源在于代码计算得到的是UTC时间,但你预期的是本地时区时间。夏令时期间本地时区与UTC存在偏移,导致显示结果偏差。只需将计算出的UTC时间转换为本地时区时间,PowerShell会自动处理夏令时偏移,无需手动判断区间。

修改后的代码:

$dnsRecordTimestampBytes = '0038a293'
# 计算UTC时间
$utcTimestamp = (Get-Date '01/01/1601Z').AddHours([int]('0x' + $dnsRecordTimestampBytes))
# 转换为本地时区时间
$localTimestamp = $utcTimestamp.ToLocalTime()
# 输出预期格式的结果
$localTimestamp.ToString("dd MMM yyyy HH:mm:ss")

运行上述代码,夏令时段的结果会自动调整为03 June 2024 12:00:00,非夏令时段也会保持正确。

补充说明

如果你的预期结果是UTC时间而非本地时间,只需确保输出UTC时间即可:

$dnsRecordTimestampBytes = '0038a293'
$utcTimestamp = (Get-Date '01/01/1601Z').AddHours([int]('0x' + $dnsRecordTimestampBytes))
$utcTimestamp.ToString("dd MMM yyyy HH:mm:ss")

此代码会直接输出UTC时间,不受本地夏令时影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:19:51