如何正确解析如下格式的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);
是否有某种方法(例如传递格式提供程序,或使用另一种方法)可以保证我的解析例程无论机器语言环境设置如何都能工作?
您使用的是最短格式!您的格式是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);