如何基于另一个格式化的时间戳生成时间戳

时间:2017-06-26 15:11:40

标签: powershell datetime

我试图在Powershell中输出一个时间戳来表示现在的时间(向下舍入到00秒),另一个表示在此之前30分钟。两个时间戳都应格式化为yyyy-mm-ddThh:mm:ss

如果我在设置$end_time时仅使用Get-Date,那么$start_time也会设置。

$end_time = Get-Date
$start_time = $end_time.AddMinutes(-30)

但是,当我根据需要格式化$end_time时,设置$start_time时会出错。看起来调用-Format会将日期作为字符串而不是日期对象返回。

$end_time = Get-Date -Format s -Second 00
$start_time = $end_time.AddMinutes(-30)
  

方法调用失败,因为[System.String]不包含方法   命名' addminutes'。

为了尝试解决这个缺点,我添加了一个$date变量,但现在我甚至无法设置$end_time。我想这是因为格式是由Get-Date函数返回的,不能追溯设置。

$date = Get-Date
$end_time = $date -Format s -Second 00
  

意外的令牌' -Format'在表达或陈述中。

所以我的问题是:如果我无法操作格式化的日期,并且如果我无法将预先生成的日期格式化为需要,那么如何生成两个相隔30分钟的时间戳(一个用于&#39 ;现在',一个30分钟之前),格式为yyyy-mm-ddThh:mm:ss

2 个答案:

答案 0 :(得分:2)

而不是使用-Format的{​​{1}}参数,而是在您创建的日期对象上使用Get-Date方法:

.ToString

<强>解释

  • 执行Get-Date并返回表示当前日期和时间的DateTime对象,并将秒设置为0.然后使用.ToString方法将其转换为字符串,以根据您的自定义样式进行格式化。
  • 下一个命令是相同的,但在将其作为格式化字符串(因此它丢失了日期对象方法)之前,使用$Date = Get-Date -Second 0 $Date.ToString("yyyy-MM-ddTHH:mm:ss") $Date.AddMinutes(-30).ToString("yyyy-MM-ddTHH:mm:ss") 方法删除30分钟。

答案 1 :(得分:1)

$date保留为datetime,根据需要使用ToString

$date       = Get-date -second 0
$end_time   = $date.ToString("yyyy-MM-ddTHH:mm:ss")
$start_time = ($date.AddMinutes(-30)).ToString("yyyy-MM-ddTHH:mm:ss")