如何以此格式正确解析DateTime:“2013-04-29T00:00:00”

时间:2013-04-29 19:27:32

标签: c# parsing datetime

我使用一个Web服务,它以字符串形式返回一些日期,并使用DateTime.Parse来获取相应的DateTime个对象。它工作正常,但我担心DateTime.Parse的使用可能容易受到不同语言环境设置导致的错误的影响。返回的日期采用以下格式:

2014-04-24T00:00:00

我用来解析它的代码:

DateTime d = DateTime.Parse(strValue);

是否有某种方式(例如传递格式提供程序或使用其他方法),我保证无论机器区域设置如何,我的解析例程都能正常工作?

5 个答案:

答案 0 :(得分:5)

如果要解析独立于用户区域设置的日期,请使用invariant culture

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

答案 1 :(得分:5)

您使用的是最短的表格!您的格式为ISO 8601格式(http://nl.wikipedia.org/wiki/ISO_8601)。它被任何文化所认可!

所以你的方式是最简单的方式:DateTime result = DateTime.Parse("2008-06-15T21:15:07");

如果您不确定,请使用:DateTime result = DateTime.ParseExact("2008-06-15T21:15:07", "s", null);

退房:http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx#properties

答案 2 :(得分: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表示这些是常量值。因此,无论其他因素如何,这条线都应该有效。

答案 3 :(得分: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(Format Strings上的MSDN)

答案 4 :(得分: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);