繁体   English   中英

奇怪的DateTime解析行为

[英]Weird DateTime parsing behaviour

在将2个字符串解析为DateTime时,我注意到这种奇怪的行为。 第一个字符串(导致异常)“20/10/2013 3:08:30 AM”第二个字符串(正确转换,没有例外)“9/10/2013 3:09:37 AM”

用于转换的代码是:

string date_1 = "20/10/2013 3:08:30 AM";
string date_2 = "9/10/2013 3:09:37 AM"; 
try
{
DateTime d1 = DateTime.parse(date_1, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);   //throws exception (String was not recognized as a valid DateTime)
} catch (Exception ex) { throw ex; }
DateTime d2 =  DateTime.parse(date_2, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);

任何人都可以解释为什么2个字符串代表相同格式的完整日期吗?

谢谢大家。

这将抛出,因为美国日期符号期望月份为第一个字段:

string d = "20/10/2013 3:08:00 AM";
Console.WriteLine(DateTime.Parse(d, new CultureInfo("en-US")));

对于InvariantCulture也是如此。

这将有效:

DateTime.Parse(d, new CultureInfo("nl-NL"))

解析日期时需要指定区域性。 如果您所在地区的计算机位置设置正确,那么日期也是如此,那么您只需使用当前文化进行解析即可。

例如

string date = "20/10/2013 3:08:00 AM";    
Console.WriteLine(DateTime.Parse(date, CultureInfo.CurrentUICulture));

或者干脆:

string date = "20/10/2013 3:08:00 AM";    
Console.WriteLine(DateTime.Parse(date));

这对我来说在澳大利亚很有用,但是如果您的区域设置是针对美国的,那么您需要指定您希望格式化日期的文化。例如

string date = "20/10/2013 3:08:00 AM";    
Console.WriteLine(DateTime.Parse(date, new CurrentUICulture("en-AU")); //en-GB, etc

可以说,如果您希望日期格式不正确,则使用DateTime.TryParse会更快(也许更安全)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM