当用户用法语查看内容时,我将区域性设置为:
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
当用英语时,我将其设置为:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
现在日期是以en-CA格式存储的,所以我明确地总是使用格式
var dateFormatPattern = "M/d/yyyy"; // "MM/dd/yyyy"
var dt = DateTime.MinValue;
if (DateTime.TryParseExact(dateString, dateFormatPattern, null, System.Globalization.DateTimeStyles.None, out dtResult))
{
dt = dtResult;
}
现在它在英语模式下工作,但在法语模式下,解析失败。
在调试模式下,我可以看到法语和英语中dateString的值是相同的,但可能是IDE改变了格式吗?由于它是一个字符串值,我认为它不可能。
那它为什么会失败呢?
法国文化的日期分隔符是破折号。将格式字符串传递给TryParseExact
时,格式字符串中的任何斜杠都必须与输入日期中的日期分隔符相匹配。
这意味着,当使用格式M/d/yyyy
和法国文化进行解析时,需要提供格式为M-d-yyyy
的字符串才能成功解析。英国文化中的日期分隔符是斜杠,所以你看不出有任何问题。
正确的解决方案取决于输入的来源以及您希望的宽容程度(例如,如果用户正在查看法语内容,但提供了带斜杠的日期格式,该怎么办?)。