当用户使用法语查看内容时,我将文化设置为:
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改变了格式吗?由于它是一个字符串值,我认为不可能。
那为什么会失败?
答案 0 :(得分:2)
法国文化的日期分隔符是破折号。将格式字符串传递给TryParseExact
时,格式字符串中的任何斜杠都必须与输入日期中日期分隔符匹配。
这意味着在使用格式M/d/yyyy
和法国文化进行解析时,您需要提供格式为M-d-yyyy
的字符串,以使解析成功。英语文化的日期分隔符是斜杠,所以你没有看到任何问题。
正确的修复方法取决于输入的来源以及您希望的宽松程度(例如,如果用户正在查看法语内容但提供使用斜杠格式化的日期?)。