我使用Invoke-RestMethod从rest API获取数据。响应的属性之一是日期。当使用 Postman 或其他工具获取数据时,会正确返回日期,但当我使用PowerShell(5.1.19041.906版)及其Invoke-RestMethod时,如下所示:
$response = Invoke-RestMethod -Method Get -Uri $url -Headers $requestHeaders
Date属性中的所有值都会自动转换为UTC。有什么办法可以停用这个变速箱吗?我需要API返回的原始值。
2条答案
按热度按时间ulydmbyx1#
当获得JSON响应时,
Invoke-RestMethod
会自动将其解析为[pscustomobject]
图形;从某种意义上说,它具有ConvertFrom-Json
内置的。当
ConvertFrom-Json
能够识别输入JSON中日期的字符串表示形式时,它会将它们转换为[datetime]
示例。在Windows PowerShell(V5.1,最新最终版本)和PowerShell(Core)7.2中,您无法控制构造什么样的
[datetime]
示例**,这反映在它们的.Kind
property上:"\/Date(1633984531266)\/"
),您不可避免地会得到Utc
示例。"2021-10-11T13:27:12.3318432-04:00"
),.Kind
值取决于字符串值的细节:Z
结尾,表示UTC,则得到一个Utc
示例。-04:00
,则会得到Local
示例(即使偏移量为00:00
)Unspecified
示例。虽然Windows PowerShell不会有新的功能,但*PowerShell(Core)*还是有希望的:**GitHub issue #13598建议在
ConvertFrom-Json
**中增加一个-DateTimeKind
参数,以便显式请求感兴趣的类型,并交替构造[datetimeoffset]
示例,这是更好的选择。解决方法:
Invoke-WebRequest
和响应的.Content
属性,如Mathias R. Jessen所示。以下代码片段**遍历从
Invoke-RestMethod
返回的[pscustomobject]
图,并显式将遇到的任何[datetime]
示例转换为Local
示例就地(Unspecified
示例被视为Local
):6tqwzwtp2#