2014-11-07 2 views
0

У меня есть требование, когда мне нужно прочитать дату из файла 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" 
} 

если это будет хорошо или есть другое логическое решение

ответ

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" 
} 
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 содержит дату ,

Смежные вопросы