2015-07-27 5 views
0

Я читаю некоторые данные из базы данных, и это значение является штампом даты и времени.Целые числа не добавляются/вычитаются

Чтобы все было в порядке, данные аналогичны этому. 7/24/2015 16:13:58

Затем я извлекаю дату только так.

$ScanDate = $($Row[3]).ToString() 
     [String]$Scan = $ScanDate.SubString(0,10) 

Я тогда разделить $ ScanDate в массив

$ Scan.Split ('/')

Тогда я изменить значение в целое для каждого дня, месяца и года

[int]$ScanMonth = $Scan[0] 
[int]$ScanDay = $Scan[1] 
[int]$ScanYear = $Scan[2] 

Проверить они Целые ..

$ScanDay.GetType() 
$ScanYear.GetType() 
$ScanMonth.GetType() 

Возвращает ..

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Int32         System.ValueType 
True  True  Int32         System.ValueType 
True  True  Int32         System.ValueType 

Вопрос в том, когда я пытаюсь и складывать и вычитать эти целые числа, я получаю неправильный результат?

$Total = [int]$ScanDay + [int]$ScanMonth 
Write-Host $Total 

Так значения 24 + 7 выйдет в 102 не 31.

Что мне не хватает? Любая помощь приветствуется :)

Обновлено

Ok, так что я хотел бы добавить окончательное сравнение code..After говорят значение базы данных было истолковано как PowerShell DATETIME я мог бы сделать все, как это.

$Date = Get-Date 
$Date = $Date.ToUniversalTime() 

$DayDifference = New-TimeSpan -Start $Date -End $Row[3] 
if ($DayDifference.TotalDays -gt 5) { 'Do Something' } 
+4

'$ Scan' является' [String] ', поэтому' $ Scan [0] 'является' [Char] '. '[Char]' casted to '[int]' создает код. Таким образом, '$ ScanMonth' является кодовым числом' 7' 55, а '$ ScanDay' является кодовым числом'/'47. 55 + 47 = 102. – PetSerAl

+0

Ahh, так что значения по-прежнему не являются истинными числами? Как я могу сделать их числами вместо кодовых точек? – LDStewart

+0

Это числа, но '$ scan.split ('/');' мало что делает. try '$ scan = $ scan.split ('/');' – Cole9350

ответ

0
$scan = "7/24/2015 16:13:58" 
$scan = $scan.Split('/'); 
[int]$ScanMonth = $Scan[0] 
[int]$ScanDay = $Scan[1] 
[int]$ScanYear = ($Scan[2].Split())[0] 

$Total = [int]$ScanDay + [int]$ScanMonth 
Write-Host $Total 

Тогда вы получите 31 .. Хотя я все еще думаю, что вы должны использовать DateTime объект

Update : простой способ решить актуальную проблему:

$scan = "7/24/2015 16:13:58" 
$scanDate = [DateTime]$scan 
$date = (get-date).addDays(-5) 
if($date -lt $scanDate) {'Do Something'} 
+0

Не знаете, как разделить точки здесь, но помощь была высоко оценена. Также, пройдя долгий путь, я узнал еще больше. Благодаря! – LDStewart

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