ConvertFrom-Json不转换日期时间

时间:2016-05-11 11:10:00

标签: json powershell datetime

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

除了通过数组并显式转换类型之外,还有其他解决方法吗?

2 个答案:

答案 0 :(得分:1)

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

如果您需要该数据类型,请将有问题的属性转换为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)

答案 1 :(得分:0)

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

但是IMVHO确实做错了:

 const data = originData.map(datum => ({...datum, id: datum.pid, name: datum.pid}));

输出:

$date = "2020-09-07T09:44:13.769Z"
$date
[datetime] $date

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

作为参考,Windows PowerShell 5.1输出:

2020-09-07T09:44:13.769Z

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