首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConvertFrom-Json不转换日期时间

ConvertFrom-Json不转换日期时间
EN

Stack Overflow用户
提问于 2016-05-11 19:10:00
回答 2查看 2.1K关注 0票数 0

ConvertFrom-Json无法将datetime字符串转换为datetime对象。在下面的例子中,类型是String,但我期望的是DateTime

代码语言:javascript
复制
$data = '[{"start":"04/15/2016 15:47:41"},{"start":"04/15/2016 16:47:41"}]' |
        ConvertFrom-Json
$data[0].start.GetType().Name

除了遍历数组并显式转换类型之外,是否有其他解决方法?

EN

回答 2

Stack Overflow用户

发布于 2016-05-11 19:26:36

ConvertFrom-Json不会失败。cmdlet值被定义为字符串(因为JSON没有"date“数据类型),因此start正确地将它们视为字符串。

如果需要该数据类型,请将有问题的属性转换为DateTime值。在您的情况下,类型转换应该足够:

代码语言:javascript
复制
$data = '[{"start":"04/15/2016 15:47:41"},{"start":"04/15/2016 16:47:41"}]' |
        ConvertFrom-Json |
        Select-Object *,@{n='start';e={[DateTime]$_.start}} -Exclude start

但是,只有当您的日期字符串采用PowerShell可识别的格式时,这种方法才有效。如果格式无法识别,则必须对字符串执行parse操作:

代码语言:javascript
复制
$fmt     = '...'   # format string
$culture = [Globalization.CultureInfo]::InvariantCulture

[DateTime]::ParseExact($_.start, $fmt, $culture)
票数 1
EN

Stack Overflow用户

发布于 2020-09-07 18:42:58

在JSON 7.0.3中,似乎ConvertFrom- PowerShell 至少在某些情况下可以转换为DateTime。

但是IMVHO它做得不正确:

代码语言:javascript
复制
$date = "2020-09-07T09:44:13.769Z"
$date
[datetime] $date

$data = ('[{"start":"' + $date + '"}]') |  ConvertFrom-Json
$data[0].start.GetType().Name
$data[0].start

输出:

代码语言:javascript
复制
2020-09-07T09:44:13.769Z

Monday, September 7, 2020 11:44:13
DateTime
Monday, September 7, 2020 09:44:13

作为参考,Windows PowerShell 5.1输出:

代码语言:javascript
复制
2020-09-07T09:44:13.769Z

Monday, September 7, 2020 11:44:13
String
2020-09-07T09:44:13.769Z
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37160853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档