5

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

2014-04-24T00:00:00

我用来解析它的代码:

DateTime d = DateTime.Parse(strValue);

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

4

5 回答 5

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

于 2013-04-29T19:42:51.010 回答
5

如果要解析独立于用户语言环境的日期,请使用不变的文化

DateTime d = DateTime.Parse(strValue, CultureInfo.InvariantCulture);
于 2013-04-29T19:30:18.590 回答
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的 表示它们是常量值。因此,无论任何其他因素如何,这条线都应该起作用。

于 2013-04-29T19:32:36.787 回答
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 )

于 2013-04-29T19:46:30.740 回答
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);
于 2013-04-29T19:40:26.183 回答