2015-04-28 60 views
0

通常從string轉換DateTime是很容易的,但是我遇到了這個格式:轉換日期時間從陌生格式DateTime對象

Mon Jan 05 17:38:34 +1100 2015 

這似乎很離奇,也使得DateTime.Parse()失敗。所有的元素都在那裏。有沒有辦法將它轉換爲DateTime,而不用執行string.split(" ")將它分成塊。它看起來好像可能是一個ISO標準,儘管標準超出了我的視野。

爲了澄清,我想在使用C#上述樣品string轉換爲DateTime對象在.NET一些幫助和寧願做它不分割字符串,如果可能的。

(@editors,你爲什麼會同意編輯改變句子停頓成連寫句是英語不好?請停止編輯爲epeen對編輯-.-緣故)

+2

退房['DateTime.ParseExact'](https://msdn.microsoft.com/en-us/library/w2sa9yss%28v=vs.110%29 .aspx)和[自定義格式字符串](https://msdn.microsoft.com/en-us/library/8kb3ddd4(v = vs.110).aspx)。 – juharr

+0

你認爲+1100代表什麼?你有沒有試過DateTime.TryParseExact? – Blackwood

+0

@Blackwood +1100是時區偏移量。 – juharr

回答

6

你可以指定確切格式:

var text = "Mon Jan 05 17:38:34 +1100 2015" 
var date = DateTime.ParseExact(text, "ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture); 

正如評論指出,較小看到zzz部分表示offset from UTC。出於這個原因,您可能更喜歡使用DateTimeOffset(使用相同的格式字符串)解析,因爲它比DateTime更好地處理此概念。但是,您的要求可能不允許這樣做。

+0

問題是'zzz'期待一個冒號。 – juharr

+0

你試過了嗎?解析就好! –

+0

你說得對。我想它不需要冒號來解析。 – juharr

1

這個工作對我來說:

var dt = "Mon Jan 05 17:38:34 +1100 2015"; 

DateTime result; 
DateTime.TryParseExact(dt, "ddd MMM dd HH:mm:ss zzzz yyyy", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out result); 

Console.WriteLine(result); 
+0

這個答案也非常適合處理任何潛在的異常或無效的格式化內聯。 –

+0

@SanuelJackson要實際處理無效格式,有必要檢查TryParseExact是返回True還是False。 – Blackwood

+0

@Blackwood - 正確的,我的意思是這個方法將返回DateTime對象的結果。因此,如果我正在閱讀這個json api的開發文件,它將不會殺死我的程序 - 最糟糕的情況是,沒有該字段的日期時間:) –

相關問題