前几天,当我的代码尝试从配置文件中的一行文本中解析日期时,用户遇到了异常。客户使用的是中文日期本地化,所以我认为问题出在解析上。
但是,在重现问题时,我发现文件本身中的文本是中文格式。此文件是从备份位置复制的,我验证该位置不是中文格式。
事实证明,文件之前是通过调用 IO 从该位置复制的。File.Copy(),文本从:
22/JUN/2016,00:00:00
自
22/6月/2016,00:00:00
文件的大小甚至发生了变化。
因此,尝试在此调用中解析该文本时会引发异常:
DateTime.ParseExact(timeString, datetimeFormat, CultureInfo.InvariantCulture)
数据不必本地化,因此我们始终使用 CultureInfo.InvariantCulture。但是,如果文件更改了日期格式,则会中断。
当我像往常一样复制并粘贴文件时,文件不会更改,这更加令人好奇。
我验证了在将区域格式更改为中文(简体,中国)后,在 Windows 10 上会出现此问题。
关于为什么是IO的任何想法。File.Copy() 导致此更改?
使用"TryParseExact"来解析日期时间总是好的。
回答您的问题时,您可能需要研究以下几点:
- 查看用于复制文件的代码。
- 尝试使用 StreamReader/StreamWriter 复制文件,请指定编码类型。