2013-04-29 25 views
5

我消耗它返回我一些日期爲字符串web服務,我用DateTime.Parse得到correspondente DateTime對象。它正在工作,但恐怕我的使用DateTime.Parse可能容易受到由不同區域設置引起的錯誤的影響。返回的日期是以下格式:如何正確地分析一個DateTime格式爲:「2013-04-29T00:00:00」

2014-04-24T00:00:00 

我使用解析它的代碼:

DateTime d = DateTime.Parse(strValue); 

是否有某種方式(如通過一個格式提供,或使用另一種方法),在該我保證我的解析例程可以工作,而不管機器語言環境設置如何?

+2

這是ISO8601日期時間格式,*不會根據機器設置而改變。傳遞文化不會傷害,但可選。 – 2013-04-29 19:39:24

+0

另外請注意,其中任何一個的結果都會有'.Kind'值爲'Unspecified' - 這可能是也可能不是您所期望的。 – 2013-04-29 20:04:48

回答

5

如果你想解析日期獨立用戶的區域設置的,然後使用invariant culture

DateTime d = DateTime.Parse(strValue, CultureInfo.InvariantCulture); 
+0

是的,你的答案會起作用,但它可以適用於任何文化。 – 2013-04-29 19:50:24

+0

@MartinMulder目前還不清楚你的意思。這些代碼在任何文化背景下都會表現出相同的方式:它會根據不變文化解析數字,並忽略當前上下文的文化規則。這似乎是OP所期望的。 – cdhowie 2013-04-29 19:51:51

+0

是的,但這比他想要的要多。看看我的答案。無論他使用何種文化(en-US,NL-NL,Invaruant等)都無關緊要。他使用的格式總是正確解析,所以你不必顯式提供文化。 – 2013-04-29 19:53:22

1

既然你有一個確切的格式,我會使用一個無歧義格式字符串:

DateTime.ParseExact("2014-04-24T00:00:00", "yyyy\\-MM\\-dd\\THH\\:mm\\:ss", null) 
// or to reduce the C#-escaped backslashes: 
DateTime.ParseExact("2014-04-24T00:00:00", @"yyyy\-MM\-dd\THH\:mm\:ss", null) 

逃脫的連字符和冒號以及逃脫的T意味着那些是不變的值。所以這條線應該工作,不管其他因素。

+0

一個很大的解決方案,而「s」會更短! – 2013-04-29 19:45:44

+1

如果「s」適合你,就去做吧。不過,我覺得將它拼出來的清晰度有助於任何人在將來閱讀您的代碼或進行故障排除。它消除了任何歧義,並且不依賴於任何內置標準 - 它只是起作用,並且永遠不會工作,並且您永遠不需要查看文檔以找出它爲什麼起作用或不起作用。 – 2013-04-29 20:13:22

0
string dateString; 
    DateTime dateValue; 

    // Parse a string. 
    dateString = "2014-04-24T00:00:00"; 
    if (DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, 
       DateTimeStyles.None, out dateValue)) 
    Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, 
      dateValue.Kind); 
+0

這會失敗,因爲「o」格式需要小數秒的七位小數。 – 2013-04-29 19:56:16

1

是的,你可以使用DateTime.ParseExact

string dateString, format; 
DateTime result; 
CultureInfo provider = CultureInfo.InvariantCulture; 

dateString = "2013-04-29T00:00:00"; 
format = "s"; 

result = DateTime.ParseExact(dateString, format, provider); 

其中「s」格式字符串表示可排序的DateTime(位於上的MSDN 210)

相關問題