将日期时间字符串转换为PowerShell v2中的不同日期时间字符串

问题描述:

我有以下字符串,它是从日志文件中的条目中提取的。将日期时间字符串转换为PowerShell v2中的不同日期时间字符串

$d = "19/09/2014 22:41:27" 

不过,我需要将其转换使其

2014-09-19 22:41:27 

,这样我可以用日志文件的其他部分导出成一个MySQL数据库。

但我不能为我的生活找到办法做到这一点。我期待能找到类似set-dateFormat的东西,它只是重新映射字符串的组成部分,但似乎并不存在。

我曾尝试以下的各种变化:

$a = "19/09/2014 22:41:27" 
$d = [datetime]::ParseExact($a, "dd/MM/yyyy hh:mm:ss", $null) 
$e = "{0:yyyymmddhhmmss}" -f [datetime]$d 

但是,一切都将返回错误:

String was not recognized as a valid DateTime.

什么是让我有需要请格式的最好方法?

+0

有关“字符串不被识别为有效的日期时间”的错误是由于您的ParseExact日期格式。你有24小时的时间在字符串$ a中列出,但你试图用小写字母“hh:”作为12小时的时间读取它。如果你使用“HH:”,它可以很好地转换。 – dwarfsoft 2015-01-29 03:22:21

一个快速游戏,在一些其他博客的帮助下提供了以下,非常类似于你自己的。可能有一种方法可以使它更简化一些,但它会创建您需要的日期时间对象。在这之后操作输出应该很简单。

$theDTString = "19/09/2014 22:41:27".toString() 
$theDateTimeObject = ([datetime]::ParseExact($theDTString,"dd/MM/yyyy HH:mm:ss",$null)) 

$theDateTimeObject.year.toString() + "-" + $theDateTimeObject.month.toString() +"-"+ 
$theDateTimeObject.day.toString() + " " + $theDateTimeObject.Hour.toString() + ":" +$theDateTimeObject.Minute.toString() + ":" + $theDateTimeObject.Second.toString() 
+2

干杯,那是(几乎)完美。唯一的问题是它错过了月份中的前导0,所以它有9而不是09.我首先创建每个部分(日,月等),然后检查长度(-lt 2),并且在构建最终日期之前添加0。 – IGGt 2014-09-24 08:41:06

相同的答案,你原来的输入是这样的:

$a = "19/09/2014 22:41:27" 
$d = [datetime]::ParseExact($a, "dd/MM/yyyy HH:mm:ss", $null) 
$e = "{0:yyyymmddhhmmss}" -f [datetime]$d 

。它是一种试图小时22转换为12小时格式的错误。