C# DateTime.TryParse问题,可能与IIS中的全球化设置有关

C# DateTime.TryParse问题,可能与IIS中的全球化设置有关,c#,.net,datetime,globalization,C#,.net,Datetime,Globalization,基本上,我正在阅读excel文件,其中一列的日期格式为:dd/MM/yyyy,例如:11/04/2016 当我使用DateTime.TryParse将该字符串解析为DateTime方法时,TryParse处理了第一个数字,如上面示例中的第11个月。但是,在其他计算机上运行的相同代码将以上面示例中的第二个数字04作为月份 所以我的问题是,为什么它们之间存在差异,是什么决定了TryParse方法的行为?我认为主要的差异在于IFormatProvider,如果我不能检查目标系统中的某些设置,很难说,但

基本上,我正在阅读excel文件,其中一列的日期格式为:dd/MM/yyyy,例如:11/04/2016

当我使用DateTime.TryParse将该字符串解析为DateTime方法时,TryParse处理了第一个数字,如上面示例中的第11个月。但是,在其他计算机上运行的相同代码将以上面示例中的第二个数字04作为月份


所以我的问题是,为什么它们之间存在差异,是什么决定了TryParse方法的行为?

我认为主要的差异在于IFormatProvider,如果我不能检查目标系统中的某些设置,很难说,但我通常使用其他方法来获得适当的DateTime对象:

DateTime someDate = DateTime.ParseExact(myStringDate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
无论客户机环境如何配置,它总是提供我想要的东西

希望这有帮助

来自:

因为DateTime.TryParseString, DateTime方法尝试分析 使用格式设置的日期和时间的字符串表示形式 当前区域性的规则,尝试分析特定字符串 在不同的文化中,可能失败,也可能返回不同的结果。 如果特定的日期和时间格式将在不同的 区域设置,使用 DateTime.TryParseString, 提供程序, 日期时间样式, 日期时间 方法或TryParseExact方法的重载之一,并提供 格式说明符

这意味着您的计算机具有指向的不同区域性设置

看起来一台计算机的当前区域性具有dd/MM/yyyy,而另一台计算机的当前区域性具有MM/dd/yyyy作为标准日期和时间格式

由于您确信您的值始终是dd/MM/yyyy格式,因此我将使用Datetime.TryParse或Datetime.TryParseExact方法,如

var dt = DateTime.ParseExact(yourColumnValue, "dd/MM/yyyy", CultureInfo.InvariantCulture);

或者,您可以将所有计算机的当前区域性设置为与第一台计算机相似,但请记住,这可能会随着windows update、.NET Framework版本或操作系统版本而发生变化。

:如果将在不同的地区解析特定的日期和时间格式,请使用DateTime.TryParseString, 提供程序, 日期时间样式, DateTime方法或TryParseExact方法的重载之一,并提供格式说明符。是的,我知道指定格式可以解决此问题,但只想知道到底是什么原因造成了差异???此格式与OP的格式不匹配。全球化没有称为不变量文化的属性或字段,因为它是一个名称空间。它至少应该像System.Globalization.CultureInfo.InvariantCulture.Edit和corrected,但我的格式只是一个简单的示例。我想任何人都知道如何替换它,但公平地说,你的评论是:DateTime someDate=DateTime.ParseExactmyStringDate,dd/MM/yyyy,System.Globalization.CultureInfo.InvariantCulture@你是否愿意发表评论,至少让我知道我错在哪里?