2010-01-07 164 views
4

我在應用中的一些代碼一起的C#解析日期和時間

DateTime activityDate = DateTime.Parse(tempDate + " " + tempTime); 

線凡tempDate與值,例如「2009-12-01」(即YYYY-MM-DD的字符串) 和tempTime是數值,如「23點12分10秒」(即HH字符串:MM:SS)

首先,有沒有更好的方式來組合這些得到一個DateTime,其次是上面的代碼可以安全地在任何地區工作(如果沒有的話,是否有辦法處理這個問題)

嗯看着日期更接近連接日期&時間實際上是這種格式「2009-11-26T19:37:56 + 00:00」 - 日期/時間的時區部分的格式字符串是什麼?

+0

(回覆評論/更新) – 2010-01-08 18:52:41

回答

10

如果格式是有保證,ParseExact可能會更安全(sepcifying圖案):

DateTime activityDate = DateTime.ParseExact(tempDate + " " + tempTime, 
    "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); 
+0

如果我在字符串中有時區信息,模式是什麼 (即2009-11-26T19:37:56 + 00:00) – 2010-01-08 15:28:01

+0

對於這種模式,我會使用' XmlConvert.ToDateTime(s)',它直接處理這種格式。 – 2010-01-08 18:52:11

6

您可以使用ParseExact指定日期和時間格式。

如:

DateTime dateTime = 
     DateTime.ParseExact("2009-12-01 23:12:10", "yyyy-MM-dd HH:mm:ss", null); 

其中產量:

Assert.That(dateTime, Is.EqualTo(new DateTime(2009, 12, 1, 23, 12, 10))); 

你也可以指定使用這種格式的文化和解析使用它的日期和時間,同時保持解析安全從處理OS文化。
從快速瀏覽看,似乎沒有這種精確的預定義格式的文化,但通常框架文化中存在許多標準格式。

0

您可以使用ParseExact指定解析的格式。這樣沒有風險爲它以其他任何方式進行解析:

DateTime activityDate = DateTime.ParseExact(tempDate + " " + tempTime, "yyyy'-'MM'-'dd HH':'mm':'ss", CultureInfo.InvariantCulture); 
0

就好像你關心,另一種選擇是做:

DateTime activityDateOnly = 
    DateTime.ParseExact(tempDate, "yyyy-MM-dd", CultureInfo.InvariantCulture); 

TimeSpan activityTime = 
    TimeSpan.ParseExact(tempTime, "hh':'mm':'ss", CultureInfo.InvariantCulture); 

DateTime activityDate = activityDateOnly + activityTime; 

只是一個選項...