明确设置日期格式化程序时,它会在法语时中断吗?

时间:2013-02-13 22:30:50

标签: c# datetime

当用户使用法语查看内容时,我将文化设置为:

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改变了格式吗?由于它是一个字符串值,我认为不可能。

那为什么会失败?

1 个答案:

答案 0 :(得分:2)

法国文化的日期分隔符是破折号。将格式字符串传递给TryParseExact时,格式字符串中的任何斜杠都必须与输入日期中日期分隔符匹配。

这意味着在使用格式M/d/yyyy和法国文化进行解析时,您需要提供格式为M-d-yyyy的字符串,以使解析成功。英语文化的日期分隔符是斜杠,所以你没有看到任何问题。

正确的修复方法取决于输入的来源以及您希望的宽松程度(例如,如果用户正在查看法语内容但提供使用斜杠格式化的日期?)。