Date 比较CSV导入的日期以获取日期

Date 比较CSV导入的日期以获取日期,date,csv,powershell,Date,Csv,Powershell,我有一个包含许多列的CSV,但我只想导入描述列、部门列和日期列。然后,我想创建一个包含描述、部门和日期信息的新对象,但只针对日期为45天或更长的项目。我知道,Import Csv将“项目日期”列作为字符串引入,因此我需要使用类似于Get Date或datetime的内容将其转换为日期格式进行比较 $data = import-csv .\items.csv | select "Description", "Department", "Item Date" $CheckDate = (Get-Da

我有一个包含许多列的CSV,但我只想导入描述列、部门列和日期列。然后,我想创建一个包含描述、部门和日期信息的新对象,但只针对日期为45天或更长的项目。我知道,
Import Csv
将“项目日期”列作为字符串引入,因此我需要使用类似于
Get Date
或datetime的内容将其转换为日期格式进行比较

$data = import-csv .\items.csv | select "Description", "Department", "Item Date"
$CheckDate = (Get-Date).AddDays(-45)
$data2 | Foreach  {get-date $_."Item Date"} |
    select "Description", "Department", "Item Date"
$newdata = $data2 | where {$data."Item Date" -lt $CheckDate}

也许有一种更简单的方法可以做到这一点,或者有一种方法可以让它发挥作用,但我遇到了麻烦。

这里肯定有一些简化的空间

$CheckDate = (Get-Date).AddDays(-45)
$data = Import-Csv .\items.csv | 
    Where-Object {
        ($_."Item Date" -as [DateTime]) -lt $CheckDate
    }

只需将“Item Date”字符串转换为
[DateTime]
使用
-as
操作符,然后将其与
Where Object
调用中的
$CheckDate
进行比较。

根据CSV中使用的日期格式和计算机的区域设置,简单地将字符串转换为
DateTime
值可能有效,也可能无效。如果您发现它没有使用该方法。也许还有一个,因为您选择的是列

$fmt     = 'dd\/mm\/yyyy'
$culture = [Globalization.CultureInfo]::InvariantCulture

$data = Import-Csv .\items.csv |
        Select-Object Description, Department, @{n='Item Date';e={
          [DateTime]::ParseExact($_.'Item Date', $fmt, $culture)
        }} |
        Where-Object { $_.'Item Date' -lt $CheckDate }
请注意,如果需要匹配文字正斜杠,则必须转义格式字符串中的正斜杠,否则它们将匹配计算机区域设置中配置的任何日期分隔符