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

如何禁用PowerShell Invoke-RestMethod响应反序列化后的UTC时区转换

可以通过两种替代方案实现保留原始日期值的需求,PowerShell 5.1 版本的 Invoke-RestMethod 没有内置参数可以直接禁用日期自动转UTC的逻辑,该转换属于组件内置的默认行为。

方案1:抓取原始响应手动解析JSON

避免使用 Invoke-RestMethod 的自动解析逻辑,改用 Invoke-WebRequest 获取原始响应字符串,手动控制JSON解析过程:

# 获取原始响应内容
$rawResponse = Invoke-WebRequest -Method Get -Uri $url -Headers $requestHeaders
# 加载序列化组件,禁用日期自动解析
Add-Type -AssemblyName System.Web.Extensions
$jsonSerializer = New-Object System.Web.Script.Serialization.JavaScriptSerializer
$jsonSerializer.DateParseHandling = [System.Web.Script.Serialization.DateParseHandling]::None
# 解析后日期属性会保留原始字符串格式
$response = $jsonSerializer.DeserializeObject($rawResponse.Content)

如果需要保留DateTime类型而非字符串,可以把DateParseHandling设置为DateTimeOffset或者指定解析时的时区基准。

方案2:自动转换后回退到原时区

如果能接受先转UTC再回退的流程,直接对转换后的DateTime对象做时区转换即可:

# 回退到本地时区时间
$originalDate = $response.yourDateProperty.ToLocalTime()

# 若API返回的是非本地时区的时间,指定时区转换即可,示例为转中国标准时间
$targetZone = [TimeZoneInfo]::FindSystemTimeZoneById("China Standard Time")
$originalDate = [TimeZoneInfo]::ConvertTimeFromUtc($response.yourDateProperty, $targetZone)

注意:PowerShell 7+ 版本中ConvertFrom-Json新增了-DateKind参数,可以直接指定日期解析的时区基准,也可以搭配Invoke-RestMethod的参数调整转换逻辑,该特性不兼容你使用的5.1版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:57:00