Powershell当前时间减去特定格式的n秒

时间:2018-07-16 11:11:37

标签: powershell formatting timestamp

我希望将当前系统时间-30秒的值以[yy.mm.dd hh:mm:ss]格式存储在变量中。 这是一个特殊的要求,因为我正在处理的日志文件具有这种格式。目前,我有以下代码,可以让我以要求的格式存储当前系统时间,但不能减去30秒。

$dateTime = Get-Date -f "[yy.MM.dd HH:mm:ss]"
$("Current time: " + $dateTime)
$("Current time - 30 second: " + $dateTime.AddSeconds(-31))

上面代码中的行$("Current time - 30 second: " + $dateTime.AddSeconds(-31))抛出错误以下消息

Method invocation failed because [System.String] does not contain a method named 'AddMinutes'.
At C:\Users\foo\log_mont.ps1:4 char:3
+ $("Current time - 30 second: " + $dateTime.AddSeconds(-31))
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

2 个答案:

答案 0 :(得分:4)

尝试一下:

$dateTime = (Get-Date).AddSeconds(-31).ToString("[yy.MM.dd HH:mm]")

请注意,这和您的原始示例均未以这种格式存储日期。他们正在创建日期的字符串表示形式。这就是为什么您无法添加秒数的原因。如果要稍后在脚本中处理日期,请将其存储为DateTime,仅在需要输出时才使用格式。例如:

$dateTime = (Get-Date).AddSeconds(-31)

# other code - maybe some date manipulation

$dateTime.ToString("[yy.MM.dd HH:mm]")

答案 1 :(得分:1)

如果您无法(直接)控制日期时间减去30秒,可以使用[datetime]::ParseExact()将字符串转换为日期时间,然后可以减去并再次转换为字符串。
(只有几秒钟才有意义,这是您上一次编辑的内容)

$dtformat = "\[yy.MM.dd HH:mm\]"
$dateTime = Get-Date -f $dtformat
$dateTime
[datetime]::ParseExact($datetime,$dtformat,$Null).AddSeconds(-30).ToString($dtformat)

示例输出:

[18.07.16 14:49:22]
[18.07.16 14:48:52]