2017-08-03 101 views
1

请原谅我,如果它已经在这里问过,但我找不到它,但这里就是这样。添加到日期时间

在我有一个日志文件,有一段时间的值被记录和时间写在HH:mm:ss

我需要解析该文件的多行,并且到目前为止我只能这样做,它只需要几分钟时间就可以开始解析行。

这是我目前用来添加的代码。然而,当分钟类似于“05”或者低于10的任何东西时,它将删除0,并且我最终得到这样的时间:15:7:49而它应该是15:07:49。

当它工作并且文件中不存在时间时,它会添加另一秒。有时logtool跳过第二,但从来没有超过1

$a = [datetime]::ParseExact($a,"HH:mm:ss",$null) 
$time = [string]$a.Hour + ":" + ($a.Minute+5) + ":" + $a.Second 
if ($time -eq $time){$time = [string]$a.Hour + ":" + ($a.Minute+5) + ":" + $a.Second} 
else {$time = [string]$a.Hour + ":" + ($a.Minute+5) + ":" + ($a.Second+1)} 

基本上,我问的是什么,我怎么能添加任意数量到分,秒,又不失HH:mm:ss格式?

谢谢。

+0

你的'$ a'变量是一个日期时间,所以你可以使用'AddHours','AddMinutes','AddSeconds'就可以了。例子'$ a.AddHours(1)' –

+1

你应该推迟尽可能长的转换回字符串。转换回字符串的唯一体面原因是用于显示*(包括日志记录)*。 –

+1

这个'if($ time -eq $ time)'总是会评估为真btw。 –

回答

3

DateTime对象具有的方法通过将一个负值来添加秒,分钟,小时,天等

$a.AddMinutes(5) 

相同的方法可用于从时间戳中减去时间:

$a.AddMinutes(-5) 

输出格式可以定义,例如经由ToString()方法或format operator-f):

$a.ToString('HH:mm:ss') 
'{0:HH:mm:ss}' -f $a 

然而,如利芬Keersmakers noted in the comments,转换DateTime值返回到一个格式化的字符串应保留用于显示的值,以用户(消息,日志,报告等)。在脚本DateTime中,对象比字符串更容易处理,因此应尽可能长时间地使用它们。

+0

使用这个和一些关于添加的更多信息,我现在正确地工作。谢谢大家的快速回复! –