【问题标题】:Powershell date comparison not returning expected resultsPowershell 日期比较未返回预期结果
【发布时间】:2013-06-22 12:14:06
【问题描述】:

不确定我是否做错了,但我没有得到预期的结果。

我有以下函数来返回 UTC 日期/时间值,因此我可以请求本地和远程机器。

function Get-UTCTime {
     Param([string]$computername=$env:computername)

    $utc = Get-WmiObject win32_utctime -ComputerName $computername 

        return $sysdt = ([string]$utc.month + "/" + [string]$utc.day + "/" + [string]$utc.year + " " + [string]$utc.hour + ":" + [string]$utc.minute + ":" + [string]$utc.second)

}

      [datetime]$lsysdt = Get-UTCTime "."
        Write-Host "Local:" $lsysdt

      [datetime]$rsysdt = Get-UTCTime $computer 
        Write-Host "Remote:" $rsysdt.addminutes(6)

        $tester1 = $lsysdt - $rsysdt 
        $tester2 = New-TimeSpan -Start $lsysdt -End $rsysdt 

        Write-Host "Tester 1" $tester1 
        Write-Host "Tester 2" $tester2 

我的结果如下

Local: 6/21/2013 6:06:43 PM
Remote: 6/21/2013 6:12:45 PM
Tester 1 -00:00:02
Tester 2 00:00:02

您可以看到我的时间相差 6 分 2 秒,但返回的结果值仅显示秒数。

我扩展了 tester1 变量的所有属性,但仍然看不到它包含分钟数。

Ticks             : -20000000
Days              : 0
Hours             : 0
Milliseconds      : 0
Minutes           : 0
Seconds           : -2
TotalDays         : -2.31481481481481E-05
TotalHours        : -0.000555555555555556
TotalMilliseconds : -2000
TotalMinutes      : -0.0333333333333333
TotalSeconds      : -2

日期时间比较缺少什么简单的小概念?

【问题讨论】:

    标签: datetime comparison powershell-2.0


    【解决方案1】:
         function Get-UTCTime {
         Param([string]$computer)
         $computer=$env:COMPUTERNAME
    
    $utc = Get-WmiObject win32_utctime -ComputerName $computer
    
        return $sysdt = ([string]$utc.month + "/" + [string]$utc.day + "/" + 
        [string]$utc.year + " " + [string]$utc.hour + ":" + [string]$utc.minute + ":" + [string]$utc.second)
    
        }
    
      [datetime]$lsysdt = Get-UTCTime "."
        Write-Host "Local:" $lsysdt
    
      [datetime]$rsysdt = Get-UTCTime $computer
        Write-Host "Remote:" $rsysdt.addminutes(6)
        $newRsysdt = $rsysdt.addminutes(6)
    
        $tester1 = $lsysdt - $newRsysdt
        $tester2 = New-TimeSpan -Start $lsysdt -End $newRsysdt
    
        Write-Host "Tester 1" $tester1 
        Write-Host "Tester 2" $tester2 
    

    【讨论】:

    • 你明白了:) 刚刚看到你的自我回答后发布我的。
    • 您可能还需要对参数部分进行一些更改。我运行您的脚本,它首先停留在该区域,说“无法验证参数'ComputerName'的参数。参数为空或空。不为空或空,然后再次尝试该命令。”因此我的脚本发生了变化。
    • 获取UTC时间的方式很好。只是想以另一种方式与您分享:通过 PS cmdlet。例如。 (get-date).ToUniversalTime().month
    【解决方案2】:

    天哪……我明白了我的问题。

    我的 addminutes() 方法仅被添加到我的主机输出中,而不是实际存储的变量中。

    叹息……当我在做这件事时已经迟到了。

    [datetime]$lsysdt = Get-UTCTime "."
        Write-Host "Local:" $lsysdt
    
    [datetime]$rsysdt = Get-UTCTime $computer 
        Write-Host "Remote:" $rsysdt.addminutes(-3)
    
        $dtdiff = New-TimeSpan -Start $lsysdt -End $rsysdt.addminutes(-3)
        $dtdiffmin = $($dtdiff.TotalMinutes).ToString("n", $dtdiffmin) 
        if ($dtdiffmin -lt [int]-3 -and $dtdiffmin -lt [int] 3) { 
                $timeok = $true 
                } 
                else {
                    $timeok = $false
                } 
    
        if ($timeok -eq $false) {
            Write-Host "Remote System Time Ok:" $dtdiffmin  
    

    【讨论】:

    • 这是我找出我的假动作后得到的代码。 (以上编辑。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2015-11-02
    相关资源
    最近更新 更多