如何正确解析如下格式的DateTime: "2013-04-29T00:00:00"

本文关键字:quot 2013-04-29T00 何正确 格式 DateTime | 更新日期: 2023-09-27 18:11:18

我使用一个web服务,它返回一些日期作为字符串,并且我使用DateTime.Parse来获得相应的DateTime对象。它正在工作,但我担心我使用DateTime.Parse可能容易受到不同语言环境设置引起的错误的影响。返回的日期格式如下:

2014-04-24T00:00:00
我用来解析它的代码:
DateTime d = DateTime.Parse(strValue);

是否有某种方法(例如传递格式提供程序,或使用另一种方法)可以保证我的解析例程无论机器语言环境设置如何都能工作?

如何正确解析如下格式的DateTime: "2013-04-29T00:00:00"

您使用的是最短格式!您的格式是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

如果希望独立于用户的区域设置解析日期,则使用不变区域性:

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

既然你有一个确切的格式,我将使用一个无歧义的格式字符串:

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表示它们是常量。因此,无论其他因素如何,这一行应该都能正常工作。

是的,您可以使用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"格式字符串表示可排序的日期时间(格式字符串上的MSDN)

  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);