【发布时间】:2016-09-29 19:20:15
【问题描述】:
这是一个单元测试:
[TestMethod]
public void Check_how_es_MX_displays_MMM()
{
var originalCulture = Thread.CurrentThread.CurrentCulture;
try
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("es-MX");
var result = new DateTime(2015, 8, 6).ToString("MMM");
Assert.AreEqual("ago", result);
}
finally
{
Thread.CurrentThread.CurrentCulture = originalCulture;
}
}
当我在 Windows 7 上运行它时,它通过了。当我在 Windows 10 机器上运行它时它失败了:
Assert.AreEqual failed. Expected:<ago>. Actual:<ago.>.
我正在两台计算机上针对 .NET 4.5.1 进行构建。
“MMM”格式字符串如何在 Windows 7 中返回“ago”和“ago”。在寡妇 10 中?我原以为它总是会给我一个 3 个字母的月份代码。
编辑
更多阅读表明使用 MMM 可以从以下位置查找缩写的月份名称:System.Globalization.DateTimeFormatInfo.AbbreviatedMonthNames
编辑 2
another question 处理(我认为)同样的问题。
【问题讨论】:
-
MMM not 不会生成 3 个字母的月份名称,它会生成缩写的月份名称。文化偏好确实改变,甚至比软件开发更快。您需要更新您的测试。
-
@HansPassant - 是的,我意识到了这一点。实际上那个测试只是一个例子,真正的测试告诉我,当我们迁移到 Windows 10 时,使用这种格式实现我们的功能将不起作用。我们的要求是一个 3 字符缩写的西班牙月份(打印在一个固定宽度的字段上的标签)。
标签: c# localization formatting