说说不同的滴答声或在使用Get-Date时如何在Powershell中获取错误

美好的一天,Powershell爱好者。

我爱他,今天我注意到一个奇怪的动机促使我写这篇文章。 我想您也会对此感兴趣。 多余刻度线的情况。 如果有兴趣,欢迎来猫:

陌生的本质是什么?

在一个处理中,为了方便选择,需要到月底为止的天数。

这是通过以下一行计算得出的:

((Get-date -Day 1).AddMonths(1)-(get-date)).days-1 

特点是它的计算可以得出不同的结果:

起初,我认为代码或Powershell版本有问题。

我在几辆汽车上检查了一下,发现情况是可以重现的。

因此,我坐下来首次亮相并编写了一个函数。

我知道了,注释立即转到代码:

 Function Get-DaysToEndOfMonths([int]$Month=1) {If($Month -lt 1){[int]$Month = 1} $CurrentDate = get-date #   $CurrentDay = $CurrentDate.day #    $FirstDayCurrentMonths = (Get-date -Day 1) #    #$FirstDayNextMonths = $FirstDayCurrentMonths.AddMonths($Month) #    #,      ,        $LastDay = $FirstDayCurrentMonths.AddMonths($Month).AddDays(-1) #    $DaysToEndOfMonths = $($LastDay - $CurrentDate).Days #     #  New-TimeSpan #$NewTimeSpan = New-TimeSpan -Start $CurrentDate -End $LastDay #$DaysToEndOfMonths = $NewTimeSpan.Days #  Write-debug "$DaysToEndOfMonths days to the end of the next $Month month" } Get-DaysToEndOfMonths(1) 

好吧,在我写完书之后,我坐下来思考并来到了这一行:

 [int]((((Get-Date -day 01).AddMonths(1)).AddDays(-1)).Day-(Get-date).Day) 

她没有给出错误,但也许是因为:

事实证明,我们没有考虑小时\分钟\秒,而是处理器时钟节拍。
请注意,Get-date返回以毫秒为单位的值。

但是,如果在执行计算时,第一个和第二个Get-date调用落在一个刻度上,则将具有以下值:

 (Get-date -day 1).AddMonth(1) = 1.12.2019 15:33:00:500 Get-date = 1.11.2019 15:33:00:500 

减去并获得30 00:00:000
但是,如果对第二个“获取日期”的调用落在下一个刻度上,则其值为
=>
 1.11.2019 15:33:00:501 

然后我们获得价值
 29 23:59:59:999 

现在找到问题了,我们可以这样做:

 #     ((((Get-Date -day 01).AddMonths(1)).AddDays(-1))-(Get-date -Hour 0 -Minute 0 -Second 0 -Millisecond 0)).Days 

而且,我们将始终具有相同的含义。

小心一点,周末愉快!

Source: https://habr.com/ru/post/zh-CN474204/


All Articles