PowerShell日期时间转换问题

PowerShell日期时间转换问题,powershell,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

当我运行以下两个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

发生了什么事?

我很确定答案在您使用的不同参数集中。关于第条。有两种不同的参数集:
net
uformat

  • 获取日期“2016-12-31”
    被检测为
    net
  • (获取日期-2016年12月31日)
    被检测为
    uformat
在后一种情况下,由于您没有指定时间组件,因此它将它们默认为当前时间。查看
-Hour

-Hour<Int32>
Specifies the hour that is displayed. Enter a value from 1 to 23. The default is the current hour.
我可能在条款或原因上有点错误,但我必须接近。即使在指定小时(例如)时,其他时间值仍然需要来自某个地方。代码运行的时间是美国东部时间下午5:24

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

Saturday, December 31, 2016 12:24:43 PM

似乎
(获取日期-2016年12月31日)
也占用了当前时间。而另一个设置为午夜。必须与使用2个不同的参数集有关。您是否尝试过将其分解为多个部分?e、 g.调用
Get Date
并存储该值,并在构建新的
TimeSpan
时使用该值?除了@Matt指出的问题之外。。。通过两次调用
Get Date
(不带参数),您使用的值(稍微)不同,至少在理论上是这样。@David Yes Get Date每次调用时都返回当前日期和时间,但差异的大小是毫秒,而不是17小时以上。
PS C:\Users\Cameron> (Get-Date -month 12 -day 31 -year 2016 -Hour 12)

Saturday, December 31, 2016 12:24:43 PM