说我有一个对象数组:
$a = @(
@{ Name = "A"; Value = "2016-01-02" },
@{ Name = "B"; Value = "2016-01-03" },
@{ Name = "C"; Value = "2016-01-04" }
)
Value
属性目前为String
。我想将每个对象的Value
属性转换为DateTime
。我可以使用for
循环完成此操作,但我想知道是否有更直接的方法来执行此操作。
答案 0 :(得分:3)
是的,计算出的属性。
$a | select @{N='Name';E={$_.Name}}, @{N='Value';E={ [datetime]$_.Value }}
答案 1 :(得分:0)
这会将第一个对象Value的数据类型更改为datetime。
$a[0].value = [datetime]::ParseExact($a[0].value,'yyyy-MM-dd',$null)
从这里循环:
foreach ($Obj in $a)
{
$Obj.Value = [datetime]::ParseExact($Obj.value,'yyyy-MM-dd',$null)
}
您接受的@TessellatingHeckler的回答对您的问题不正确!它只是更改对象中数据的表示形式,但不会按照您的要求进行转换。即使将其保存为新对象(或覆盖原始对象),也会更改对象本身。如果您运行流动的代码,您可以看到差异:
$b=$a | select @{N='Name';E={$_.Name}}, @{N='Value';E={ [datetime]$_.Value }}
#check the original and converted object
$a|gm
$b|gm