You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求调整PowerShell单行脚本:将日期字符串转为[datetime]类型

将日志提取的日期字符串转换为PowerShell [datetime]类型

原脚本与输出

原PowerShell单行脚本:

Select-String -Path "C:\temp\TrackerLog.log" -Pattern "Program exited successfully" | Foreach-Object Line | Foreach {$_ -replace "\["} | %{ $line = $_.Split(' ') ; write-host $line[0] $line[1]}

执行后输出的日期时间字符串示例(带HTML标签):

<p>14.03.2022 08:12:38</p>
<p>21.03.2022 12:36:36</p>
<p>29.03.2022 19:39:59</p>
<p>04.04.2022 11:05:44</p>
<p>11.04.2022 13:08:49</p>
<p>18.04.2022 09:48:50</p>
<p>27.04.2022 06:18:45</p>
<p>02.05.2022 10:41:26</p>
<p>10.05.2022 04:25:48</p>
<p>18.05.2022 04:56:44</p>
<p>26.05.2022 03:32:25</p>
<p>28.05.2022 10:18:00</p>
<p>04.06.2022 22:49:16</p>
<p>07.06.2022 02:31:08</p>

解决方案

要将这些字符串转换为[datetime]类型,核心是先清理冗余字符,再按固定格式精确解析,修改后的脚本如下:

# 提取日志行并转换为datetime对象
$dateTimeObjects = Select-String -Path "C:\temp\TrackerLog.log" -Pattern "Program exited successfully" | 
    ForEach-Object { $_.Line -replace "\[", "" } |  # 移除左方括号
    ForEach-Object { ($_ -split ' ')[0,1] -join ' ' } |  # 提取日期时间部分
    ForEach-Object { $_ -replace '<p>|</p>', '' } |  # 去除HTML标签
    ForEach-Object { 
        # 按指定格式解析为datetime,格式对应:日.月.年 时:分:秒
        [datetime]::ParseExact($_, 'dd.MM.yyyy HH:mm:ss', $null)
    }

# 输出转换后的datetime对象(可直接用于后续处理)
$dateTimeObjects

关键细节

  • 替换Write-Host:原脚本用Write-Host仅向控制台输出文本,无法留存数据做后续处理,修改后直接返回处理后的字符串
  • 清理冗余内容:通过-replace移除HTML标签和多余符号,得到纯日期时间字符串
  • 精确解析:使用[datetime]::ParseExact指定格式,避免系统区域设置差异导致的解析失败,因为你的日期格式是固定的日.月.年 时:分:秒

后续处理示例

得到[datetime]对象后,可执行各类时间相关操作:

# 筛选2022年5月及之后的记录
$dateTimeObjects | Where-Object { $_.Year -eq 2022 -and $_.Month -ge 5 }

# 计算首尾记录的时间差
$timeSpan = $dateTimeObjects[-1] - $dateTimeObjects[0]
Write-Host "总运行间隔:$($timeSpan.TotalDays) 天"

内容的提问来源于stack exchange,提问作者Johny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:20:36