我希望存储当前系统时间的值-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
发布于 2018-07-16 03:22:19
试试这个:
$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]")
发布于 2018-07-16 04:51:39
如果您没有(直接)控制从其中减去30秒的日期,可以使用[datetime]::ParseExact()
将字符串转换为[datetime]
类型,然后再从[datetime]
中减去并转换为string。
(仅包括秒在内的内容是有意义的,你在上一次编辑中做了什么)
$dtformat = "\[yy.MM.dd HH:mm:ss\]"
$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]
https://stackoverflow.com/questions/51360453
复制相似问题