【问题标题】:How can I delete Time from a DateTime formated CSV如何从 DateTime 格式的 CSV 中删除时间
【发布时间】:2013-09-10 20:33:28
【问题描述】:

我会尽量准确地描述这一点。我的 CSV 格式为:

email,            DayMade
email1@email.com, 2013-07-30T15:31:11.000Z
email2@email.com, 3013-07-31T15:31:15.0001

该报告每隔几天就会自动生成一次。我需要过滤它以删除所有超过一周的条目。有人告诉我使用命令:

$CutoffDate = (Get-Date).AddDays(-5)
$Data = Import-CSV "C:\gam\newestreport.csv" | `
Where-Object {$_.Date -as '[DayMade]' -lt $CutoffDate}

但是,这会返回错误,我认为这是由包含的时间 (T15:31:11.0007) 引起的。

我不知道如何在离开日期时删除时间。

【问题讨论】:

    标签: datetime powershell csv gam


    【解决方案1】:

    在您的 Where-Object 脚本块中,您需要将“DayMade”属性转换为 [DateTime] 对象。此外,在投射时,不要将要投射的类型括在引号中。

    $CutoffDate = (Get-Date).AddDays(-5)
    $Data = Import-CSV "C:\gam\newestreport.csv" | `
    Where-Object {$_.DayMade -as [DateTime] -lt $CutoffDate}
    

    【讨论】:

    • [DateTime]$_.DayMade 也可以工作,阅读起来可能会更好一些。如果他想只比较没有时间的日期,他可以使用([DateTime]$_.DayMade).Date 并设置$CutoffDate = (Get-Date).Date.AddDays(-5)
    • @AnsgarWiechers,说得好。请注意,当字符串值无效时,显式转换为 DateTime 将引发异常,并且使用“as”运算符进行转换不会,因为它将返回 null(没有双关语)。 $null -lt $CutoffDate 将返回 true,因此 DayMade 中包含无效字符串的记录将使用“as”运算符返回,并使用显式转换运算符抛出异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2010-11-26
    相关资源
    最近更新 更多