ConvertFrom-Json无法将datetime字符串转换为datetime对象。在下面的例子中,类型是String,但我期望的是DateTime。
$data = '[{"start":"04/15/2016 15:47:41"},{"start":"04/15/2016 16:47:41"}]' |
ConvertFrom-Json
$data[0].start.GetType().Name除了遍历数组并显式转换类型之外,是否有其他解决方法?
发布于 2016-05-11 19:26:36
ConvertFrom-Json不会失败。cmdlet值被定义为字符串(因为JSON没有"date“数据类型),因此start正确地将它们视为字符串。
如果需要该数据类型,请将有问题的属性转换为DateTime值。在您的情况下,类型转换应该足够:
$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操作:
$fmt = '...' # format string
$culture = [Globalization.CultureInfo]::InvariantCulture
[DateTime]::ParseExact($_.start, $fmt, $culture)发布于 2020-09-07 18:42:58
在JSON 7.0.3中,似乎ConvertFrom- PowerShell 至少在某些情况下可以转换为DateTime。
但是IMVHO它做得不正确:
$date = "2020-09-07T09:44:13.769Z"
$date
[datetime] $date
$data = ('[{"start":"' + $date + '"}]') | ConvertFrom-Json
$data[0].start.GetType().Name
$data[0].start输出:
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输出:
2020-09-07T09:44:13.769Z
Monday, September 7, 2020 11:44:13
String
2020-09-07T09:44:13.769Zhttps://stackoverflow.com/questions/37160853
复制相似问题