【问题标题】:How to compare time between two variables如何比较两个变量之间的时间
【发布时间】:2019-05-30 17:12:55
【问题描述】:

我正在尝试比较两个变量之间的时间差。 $dt 是从日志文件文本中提取的字符串。 $curtime 是从当前日期和时间中提取的。

如果我输出$dt,它会正确显示日志文件中的日期和时间。如果我输出$curtime,它会正确显示工作站的日期和时间。

但是当我尝试运行 New-TimeSpan 并输出差异时,我的响应总是“02:24:12”。

这是我正在使用的代码:

New-TimeSpan $dt $curtime | Set-Variable -Name $TimeDiff
if ($TimeDiff.Seconds -lt 0) }
    $Hrs = ($TimeDiff.Hours) + 23
    $Mins = ($TimeDiff.Minutes) + 59
    $Secs = ($TimeDiff.Seconds) + 59 }
else {
    $Hrs = $TimeDiff.Hours
    $Mins = $TimeDiff.Minutes
    $Secs = $TimeDiff.Seconds }
$Difference = '{0:00}:{1:00}:{2:00}' -f $Hrs,$Mins,$Secs
$Difference

【问题讨论】:

  • 变量 $dt 是一个字符串。您需要先将该字符串转换为 DateTime 对象。例如,根据字符串的格式,您可以使用[DateTime]::Parse()[DateTime]::ParseExact()。见DateTime的方法。
  • 所以当我尝试 Parse 或 ParseExact,使用 $dt = datetime]::ParseExact($dt,"MM-dd-yy HH:mm:ss",$null),我得到一个错误“使用“3”参数调用“ParseExact”的异常:“字符串未被识别为有效的日期时间。”当我调用我的 $dt 和 $dt2 时,我得到完全相同的文本和格式:05/30/ 19 08:23:37
  • 您的日期元素由斜杠而不是破折号分隔,因此您需要使用 $dt = [DateTime]::ParseExact($dt,"MM/dd/yy HH:mm:ss" ,$null)

标签: powershell variables time compare


【解决方案1】:

除非日志中的日期时间来自非常窄的时间跨度,
通过添加 23:59:59 来操纵 IMO 毫无意义。
最好从 .TotalHours 中取出整数部分

这里返回时间 > 24/99

$dt       = "05/26/19 08:23:37"
$LogDT    = [datetime]::parseexact($dt,"MM/dd/yy HH:mm:ss",[cultureInfo]::Invariantculture)
$TimeDiff = [datetime]::now - $LogDT
$Difference = '{0:00}:{1:00}:{2:00}' -f ([math]::floor($Timediff.TotalHours)),
                                        $Timediff.Minutes,$Timediff.Seconds

样本输出:

> $Difference
111:16:17

【讨论】:

  • 是的,日志文件中的日期时间将是分钟和小时。所以让我从一开始就解决这个问题。我的日志文件中的原始数据是 05/30/19 14:01:02。双日,军事时间与两位数无关。我使用以下脚本从日志文件中提取数据: $regdt = '\b\d{1,2}\/\d{1,2}\/\d{1,4}\ \d{1,2 }\:\d{1,2}\:\d{1,2}\b' 选择字符串 -Path $input_path -Pattern $regdt -AllMatches | % {$_.Matches} | %{$_.值} | Set-Variable -Name dt 我的 dt 输出为 05/30/19 14:01:02。当我运行您在上面发布的内容时,我的 $LogDT 会在 2019 年 5 月 26 日星期日 8:23:37 出现
  • 是的,这是您的本地输出格式,但它是 [datetime] type 并且可以简单地从另一个日期时间中减去以返回时间跨度。
  • 无法将值“05/30/19 16:36:30”转换为类型“System.Int32”。错误:“输入字符串的格式不正确。”在 line:28 char:1 + $TimeDiff = $curtime - $dt
  • 你是如何获得$curtime的?它还必须是 [datetime] 类型。
  • $curtime = Get-Date -UFormat "%m/%d/%y %H:%M:%S"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2013-01-04
相关资源
最近更新 更多