我使用一个Web服务,它以字符串形式返回一些日期,并使用DateTime.Parse
来获取相应的DateTime
个对象。它工作正常,但我担心DateTime.Parse
的使用可能容易受到不同语言环境设置导致的错误的影响。返回的日期采用以下格式:
2014-04-24T00:00:00
我用来解析它的代码:
DateTime d = DateTime.Parse(strValue);
是否有某种方式(例如传递格式提供程序或使用其他方法),我保证无论机器区域设置如何,我的解析例程都能正常工作?
答案 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);