【问题标题】:How to calculate difference in minutes between START and END times in a file using Powershell or cmd如何使用 Powershell 或 cmd 计算文件中开始时间和结束时间之间的分钟差
【发布时间】:2022-12-16 07:10:45
【问题描述】:

该文件具有以下内容。

START Sun 04/17/2022 13:01:44.13 
END   Sun 04/17/2022 14:41:50.60

我正在尝试找到一种方法来自动化从ENDSTART 时间花费了多少分钟,我不关心秒数,只需要知道运行需要多少分钟。 在这个例子中,它花了 100 分钟,但我不得不手动计算。 如果有任何反馈,我将不胜感激。

【问题讨论】:

    标签: powershell date difference


    【解决方案1】:

    假设您的输入文件名为file.txt

    $dates = [datetime[]] ((Get-Content file.txt) -replace '^w+ +')
    [int] ($dates[1] - $dates[0]).TotalMinutes  # -> 100
    
    • 您的日期时间字符串的格式可以直接转换为 [datetime]

      • 要从每一行中提取日期时间字符串,必须删除第一个以空格分隔的标记,这是基于正则表达式的 -replace 运算符可以执行的操作:

        • -replace '^w+ +' 匹配字符串开头 (^) 的一个或多个 (+) 单词字符(w、字母、数字或 _),后跟一个空格,匹配类似 @987654332 的内容@.由于没有指定替换字符串,匹配的字符串实际上是删除.
      • -replace 可以将数组作为其 LHS 进行操作,在这种情况下,将对每个元素执行操作;因此,输入文件的所有行都可以立即作为输入,正如Get-Content 所返回的那样。

    • 减去两个 [datetime] 实例会产生一个 [timespan] 实例,表示两个时间点之间的时间跨度:

      • 它的.TotalMinutes 属性以小数分钟报告跨度(作为[double] 实例)
      • 将该值转换为 [int] 会产生整数分钟数,使用半到偶数的中点舍入。

    【讨论】:

      【解决方案2】:

      New-TimeSpanDateTime 的对象实例的 ParseExact()TryParse() 方法将在这里帮助您。

      $Start = [datetime]::ParseExact('04/17/2022 13:01:44.13', 'MM/dd/yyyy HH:mm:ss.ff', $null)
      $End = [datetime]::ParseExact('04/17/2022 14:41:50.60', 'MM/dd/yyyy HH:mm:ss.ff', $null)
      New-TimeSpan -Start $Start -End $End
      

      这将提供如下所示的输出:

      Days              : 0
      Hours             : 1
      Minutes           : 40
      Seconds           : 6
      Milliseconds      : 470
      Ticks             : 60064700000
      TotalDays         : 0.0695193287037037
      TotalHours        : 1.66846388888889
      TotalMinutes      : 100.107833333333
      TotalSeconds      : 6006.47
      TotalMilliseconds : 6006470
      

      通过执行类似于以下的操作来访问特定的会议记录:

      > $result = New-TimeSpan -Start $Start -End $End
      > $result.TotalMinutes
      100.107833333333
      
      # Round up to 2 decimal places
      > [Math]::Round($result.TotalMinutes, 2)
      100.11
      
      # Round up to 0 decimal places
      > [Math]::Round($result.TotalMinutes, 0)
      100
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 2015-03-13
        • 1970-01-01
        • 2015-05-25
        • 1970-01-01
        相关资源
        最近更新 更多