转换数组中所有对象的数据类型属性

时间:2016-08-18 20:04:22

标签: powershell powershell-v5.0

说我有一个对象数组:

$a = @(
    @{ Name = "A"; Value = "2016-01-02" },
    @{ Name = "B"; Value = "2016-01-03" },
    @{ Name = "C"; Value = "2016-01-04" }
)

Value属性目前为String。我想将每个对象的Value属性转换为DateTime。我可以使用for循环完成此操作,但我想知道是否有更直接的方法来执行此操作。

2 个答案:

答案 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