如何将字符串解析为本地日期并在Powershell中将其转换为UTC?

时间:2015-07-03 16:18:33

标签: powershell

我有一个我要解析的日志,除其他外,将日期/时间从当前本地格式转换为UTC并将其转换回文本。

我有逻辑去做除转换部分之外的所有事情。

$_.Line -replace '(\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2})',(conversion_here)

2 个答案:

答案 0 :(得分:2)

您可以使用[DateTime]对象:

([DateTime]'2015-07-03 10:58:00').Date.ToUniversalTime()

对于替换方案,您可以使用:

$pattern = '(\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2})'
if ($line -match $pattern) {
    $utcStr = ([DateTime]$matches[1]).ToUniversalTime().ToString('yyyy-MM-dd HH:mm:ss')
    $line -replace $pattern, $utcStr
}

答案 1 :(得分:1)

使用带有回调函数的Replace()类的regex方法:

$fmt = 'yyyy-MM-dd HH:mm:ss'
$callback = {
  (Get-Date $args[0].Groups[1].Value).ToUniversalTime().ToString($fmt)
}
$re = [regex]'(\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2})'

...
$re.Replace($_.Line, $callback)
...