在循环中比较日期

时间:2014-11-07 11:29:44

标签: date powershell

我有一个要求,我需要从CSV文件中读取日期并将其与脚本中的日期变量进行比较。但是,当CSV文件中的某些日期条目为空时,我的代码不起作用。知道如何在[datetime]变量中存储空白日期吗?

这是我的代码的一部分:

#This is my date variable in script
$InactivityDate = (Get-Date).AddDays(-62).Date


Import-Csv $MyCSV | ForEach {

#This is the date variable i'm reading from csv file
$whenCreated = $_.whenCreated


#This converts value in string variable $whenCreated to [DateTime] format
$ConvertWhenCreated = ([datetime]::ParseExact($whenCreated,"dd/MM/yyyy",$null))

#Comparing dates
if($ConvertWhenCreated -le $InactivityDate)
{

"Account is dormant"

}

$whenCreated包含某些值时,上面的代码工作正常,但是当它空白时,PowerShell显然无法将日期变量与空白值进行比较:( 我现在能看到的唯一解决方案是检查$whenCreated是否为空并保存一个非常旧的日期,就像它在Excel中发生的那样,例如:

if($whenCreated -eq "")
{
$whenCreated = "01/01/1900 00:00:00"
}

这应该没问题还是有其他逻辑解决方案?

2 个答案:

答案 0 :(得分:2)

您的问题很可能不是比较,而是通过ParseExact()将空白值转换为日期。如果您希望帐户没有将日期视为休眠状态,您可以执行以下操作:

$whenCreated = $_.whenCreated
if ($whenCreated) {
  $whenCreated = [DateTime]::ParseExact($whenCreated, 'dd/MM/yyyy', $null)
}

if ($whenCreated -le $InactivityDate) {
  'Account is dormant'
}

只要$null包含日期,检查空字符串(或$InactivityDate)是否小于或等于$true将返回$InactivityDate

答案 1 :(得分:0)

你已经测试过字符串是否为空,这很好。但是没有必要分配一个虚假的旧日期,你可以简单地分配$ null:

$InactivityDate = (Get-Date).AddDays(-62)

$dateString = "2014-11-01"

if ($dateString) {
    $date = Get-Date $dateString
} else {
    $date = $null
}

if ($date -le $InactivityDate) {
    "Account is dormant"
}