【问题标题】:Datetime value with different culture not formatting correctly具有不同文化的日期时间值格式不正确
【发布时间】:2013-02-07 13:55:31
【问题描述】:

我在 Thread 文化和获取正确显示的日期方面遇到了一点问题。 我正在重载 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";

【问题讨论】:

    标签: c# datetime localization cultureinfo


    【解决方案1】:

    改变这一行:

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

    到这里:

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

    在这里阅读:System.Globalization.InvariantCulture

    【讨论】:

    • 谢谢。我不敢相信我忘记了>_
    【解决方案2】:

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

    如果您想保持日期不变,无论文化如何,请使用@987654321@

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

    如果您正在寻找更多信息,请查看this msdn link

    如果你想要个人推荐一个用于处理令人敬畏的全球化的库,那么我推荐Noda Time

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      相关资源
      最近更新 更多