具有不同区域性的日期时间值格式不正确



我在线程区域性和正确显示日期方面遇到了一个小问题。我正在重载DateTime类的ToString()方法。

使用文化"en-CA",我的约会将以正确的格式"yyyy/MM/dd"发布但由于文化"fr CA",我的约会日期是"yyyy-MM-dd"

我做了一些单元测试来显示这个问题。英语考试有效,但法语总是不及格。

即使我将GetDateInStringMethod更改为ToShortDateString,我仍然会遇到同样的问题。

[Test()]
public void ValidInEnglish()
{
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
    Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = Utility.DatePattern;
    DateTime? currentDate = new DateTime(2009,02,7);
    string expected = "2009/02/07";
    string actual = DateUtils.GetDateInString(currentDate);
//This works
    Assert.AreEqual(expected, actual);
}
[Test()]
public void ValidInFrench()
{
    Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
    Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = Utility.DatePattern;
    DateTime? currentDate = new DateTime(2009, 02, 7);
    string expected = "2009/02/07";
    string actual = DateUtils.GetDateInString(currentDate);
// This doesn't work
    Assert.AreEqual(expected, actual);
}
public static string GetDateInString(DateTime? obj)
{
    if (obj == null || !obj.HasValue)
    {
        return string.Empty;
    }
    return obj.Value.ToString(Utility.DatePattern);
}
public const string DatePattern = "yyyy/MM/dd";

更改此行:

return obj.Value.ToString(Utility.DatePattern);

到此:

return obj.Value.ToString(Utility.DatePattern, CultureInfo.InvariantCulture);

请在此处阅读:System.Globalization.InvariantCulture

这不起作用,因为使用法国区域性默认日期时间格式化程序使用-而不是/作为分隔符

如果您想在任何地区保持日期不变,请使用CultureInfo.InvariantCulture

如果您想要使用法语格式,请将您的预期测试结果更改为"2009-02-07"

如果您正在查找更多信息,请查看此msdn链接

如果你想为一个库提供个人推荐,用来处理全球化带来的敬畏,那么我推荐Noda Time。

相关内容

  • 没有找到相关文章

最新更新