2014-09-23 209 views
2

我有以下字符串,它是從日誌文件中的條目中提取的。將日期時間字符串轉換爲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

回答

6

一個快速遊戲,在一些其他博客的幫助下提供了以下,非常類似於你自己的。可能有一種方法可以使它更簡化一些,但它會創建您需要的日期時間對象。在這之後操作輸出應該很簡單。

$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

1

相同的答案,你原來的輸入是這樣的:

$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小時格式的錯誤。

相關問題