2014-12-11 2 views
1

Когда я запускаю ниже 2 заявления Powershell, я ожидаю, что они возвратят тот же самый результат, но на самом деле они возвращают разные результаты:PowerShell время дата выпуска преобразования

New-TimeSpan $(Get-Date) $(Get-Date -month 12 -day 31 -year 2016) 
New-TimeSpan $(Get-Date) $(Get-Date "2016-12-31") 

Результаты являются:

Days    : 751 
Hours    : 0 
Minutes   : 0 
Seconds   : 0 
Milliseconds  : 1 
Ticks    : 648864000010001 
TotalDays   : 751.000000011575 
TotalHours  : 18024.0000002778 
TotalMinutes  : 1081440.00001667 
TotalSeconds  : 64886400.0010001 
TotalMilliseconds : 64886400001.0001 

Days    : 750 
Hours    : 6 
Minutes   : 50 
Seconds   : 13 
Milliseconds  : 67 
Ticks    : 648246130673175 
TotalDays   : 750.284873464323 
TotalHours  : 18006.8369631437 
TotalMinutes  : 1080410.21778863 
TotalSeconds  : 64824613.0673175 
TotalMilliseconds : 64824613067.3175 

Любая идея, что происходит?

+0

кажется, что '(Get-Date -месяца 12 -дня 31 -летний 2016)' также принимает текущее время. тогда как другой установлен на полночь. Должно быть связано с использованием двух разных наборов параметров. – Matt

+0

Вы пытались сломать это на кусочки? например вызывая 'Get-Date' и сохраняя значение и используя это значение при построении нового' TimeSpan'? – David

+0

В дополнение к проблеме @Matt указывает ..., дважды вызывая 'Get-Date' (без параметров), вы используете (слегка) разные значения, по крайней мере теоретически. – David

ответ

3

Я уверен, что ответ находится в разных наборах параметров, которые вы используете. См. Статью TechNet. Есть 2 различных наборов параметров: net и uformat

  • Get-Date "2016-12-31" в настоящее время обнаружены в net
  • (Get-Date -month 12 -day 31 -year 2016) в настоящее время определяется как uformat

В последней, так как вы не указываете компоненты времени , он по умолчанию ставит их на текущее время. Глядя на документацию для -Hour

-Hour<Int32> 
Specifies the hour that is displayed. Enter a value from 1 to 23. The default is the current hour. 

Когда строка «2016-12-31» заливается в полночь даты и времени используется при отсутствии значения. В другом случае время не указано, поэтому оно использует текущее время на своем месте.

PS C:\Users\Cameron> (Get-Date -month 12 -day 31 -year 2016) 

Saturday, December 31, 2016 5:14:32 PM 


PS C:\Users\Cameron> $(Get-Date "2016-12-31") 

Saturday, December 31, 2016 12:00:00 AM 

Возможно, я ошибаюсь в отношении терминов или причин, но я должен быть близок. Даже при указании часа, например, другие значения времени все равно должны появляться откуда-то. Время, когда код был запущен было 5:24 pmEST

PS C:\Users\Cameron> (Get-Date -month 12 -day 31 -year 2016 -Hour 12) 

Saturday, December 31, 2016 12:24:43 PM 
Смежные вопросы