繁体   English   中英

奇怪的Convert.ToDateTime行为

[英]Strange Convert.ToDateTime behavior

为什么Convert.ToDateTime对于以下值表现奇怪?

以下工作正常:

var value = "08/01/2011";
var dateTime = Convert.ToDateTime(value);

结果是: {08/01/2011 00:00:00} ---这是预期的。

但现在,当我这样做时:

var value = "07/21/2011";
var dateTime = Convert.ToDateTime(value);

我得到一个例外:

'Convert.ToDateTime("07/21/2011")' threw an exception of type 'System.FormatException'

"07/21/2011";

这不是有效日期,因为21将被解释为月份。

尝试明确指定格式:

DateTime myDate = DateTime.ParseExact("07/21/2011", "MM/dd/yyyy", 
                                      CultureInfo.InvariantCulture);

编辑:

同意@ dtb的评论 - 我找不到你指定的日期合法的文化。 但一般形式是:

DateTime myDate = Convert.ToDateTime("07/21/2011", new CultureInfo("XXX"))

其中XXX是您要使用的文化的名称(即“en-GB” - 虽然这不适用于此格式)

根据当前线程的区域性设置(由Windows控制面板中的区域设置确定)解析日期/时间字符串。

例如,如果当前文化是fr-FRen-GB ,则输入应以day/month/year格式表示。 如果当前文化是en-US ,则输入预计为month/day/year格式。

您可以通过查看发现当前线程的区域性设置Thread.CultureInfo财产Thread.CurrentThread

如果您不想根据当前线程的区域性设置解析日期/时间字符串,则必须明确指定区域性设置。

您的输入似乎是en-US格式,而您的系统似乎配置为fr-FRen-GB 所以明确地将en-US指定为文化:

DateTime result = DateTime.Parse("07/21/2011", new CultureInfo("en-US"));
// result.Day   == 21
// result.Month == 7
// result.Year  == 2011

你的第一个例子起作用的原因是因为1是一个有效的月,不像21

DateTime result = DateTime.Parse("08/01/2011", new CultureInfo("fr-FR"));
// result.Day   == 8
// result.Month == 1
// result.Year  == 2011

暂无
暂无

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

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