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” – 日期/时间的时区部分的格式字符串是什么?

如果格式有保证, ParseExact可能更安全(分离模式):

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

您可以使用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文化的影响。
从快速浏览看,似乎没有具有这种确切预定义格式的文化,但通常在框架文化中存在许多标准格式。

使用ParseExact。 它已被问过几次关于SO .. Link1 , Link2

您可以使用ParseExact指定解析的格式。 这样就不存在以任何其他方式解析它的风险:

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

好像你在乎,另一种选择是做:

 DateTime activityDateOnly = DateTime.ParseExact(tempDate, "yyyy-MM-dd", CultureInfo.InvariantCulture); TimeSpan activityTime = TimeSpan.ParseExact(tempTime, "hh':'mm':'ss", CultureInfo.InvariantCulture); DateTime activityDate = activityDateOnly + activityTime; 

只是一个选择……