基本上,我正在阅读excel文件,其中一列的日期格式如下:dd/MM/yyyy
例如:11/04/2016
当我使用DateTime.TryParse()
将该字符串解析为datetime方法TryParse()
处理的第一个数字(如月份)(上例中的数字11)。但是,在其他计算机上运行的相同代码将使用第二个数字(上例中的04)作为月份。
所以我的问题是为什么它们之间存在差异,究竟是什么决定了TryParse
方法的行为?
答案 0 :(得分:0)
我认为主要区别在于IFormatProvider(很难说我是否无法检查目标系统中的某些设置),但我通常使用其他方法来获取正确的DateTime对象:
DateTime someDate = DateTime.ParseExact(myStringDate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
无论客户端环境如何配置,它总能给我我想要的东西。
希望这会有所帮助。 :)
答案 1 :(得分:-1)
来自DateTime.TryParse(String, DateTime)
documentation:
因为
DateTime.TryParse(String, DateTime)
方法试图解析 使用格式设置的日期和时间的字符串表示形式 当前文化的规则,试图解析一个特定的字符串 跨越不同文化可能会失败或返回不同的结果。 如果将跨不同的方式解析特定的日期和时间格式 locales,使用DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime)
方法或TryParseExact
方法的重载之一并提供 格式说明符。
这意味着您的计算机具有不同的文化设置,这些设置指向CurrentCulture
property。
看起来一台计算机的当前文化具有dd/MM/yyyy
,而另一台计算机的当前文化具有MM/dd/yyyy
作为标准日期和时间格式。
由于您确定自己的值始终采用dd/MM/yyyy
格式,因此我会使用DateTime.ParseExact
代替Datetime.TryParse
或DateTime.TryParseExact
方法;
var dt = DateTime.ParseExact(yourColumnValue, "dd/MM/yyyy", CultureInfo.InvariantCulture);
或者,您可以将所有计算机的当前文化设置为与第一台计算机相似,但请记住CultureInfo
data is not a stable data 可能将来使用Windows更新,.NET Framework版本或操作系统版本进行更改。