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
除了通过数组并显式转换类型之外,还有其他解决方法吗?
答案 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