【问题标题】:datetime.tostring month and day languagedatetime.tostring 月份和日期语言
【发布时间】:2012-02-19 18:45:18
【问题描述】:

我有一个不同国籍的人的电子邮件地址列表(每个人都有 iso 代码)

当我向所有这些人发送电子邮件时,我需要在邮件文本中将日期时间字段转换为按他们特定文化格式化的字符串。

为此我正在做

CultureInfo ci = new CultureInfo(ISO);
myStringDate = myDate.ToString(ci.DateTimeFormat.ShortDatePattern);

并且工作完美,但如果我使用 LongDatePattern 而不是短的,用于显示“2010 年 6 月 13 日星期一”之类的日期,除了日期和月份的语言外,它工作正常。

如果个人文化是它——我需要显示“Martedi”和“Giugno”而不是“monday”和“June”

如何在不改变当前 UI 文化的情况下做到这一点?

【问题讨论】:

    标签: c# datetime tostring cultureinfo


    【解决方案1】:

    这些模式在DateTime 的输出结果中描述了年、月、日和其他参数位置。但是月份和日期 names 取自 CultureInfo 对象,而不是模式。 DateTime.ToString() overload 支持将 CultureInfo 参数与格式一起传递。

    CultureInfo culture = new CultureInfo(ISO); 
    DateTime.Now.ToString(culture.DateTimeFormat.LongDatePattern, culture);
    

    这样,.ToString() 将尊重来自指定文化的模式和名称

    【讨论】:

      【解决方案2】:

      您只指定了格式模式,因此它采用默认格式的其他设置。您还应该指定格式提供程序:

      myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern, ci);
      

      或对长日期模式使用标准格式字符串D(因为它将采用您指定的格式提供程序的实际模式):

      myStringDate = myDate.ToString("D", ci);
      

      演示:

      CultureInfo ci = new CultureInfo("it-IT");
      Console.WriteLine(DateTime.Now.ToString("D", ci));
      ci = new CultureInfo("sv-SE");
      Console.WriteLine(DateTime.Now.ToString("D", ci));
      

      输出:

      giovedì 26 gennaio 2012
      den 26 januari 2012
      

      【讨论】:

        【解决方案3】:

        我刚刚遇到了类似的问题并解决了:

        DateTime.Now.ToString("dddd, dd MMMM yyyy", new System.Globalization.CultureInfo("it-IT"));
        

        感谢this link.

        【讨论】:

          【解决方案4】:

          使用DateTimeFormatInfo 类。

          string code = "mk-MK";
          DateTimeFormatInfo info =
              DateTimeFormatInfo.GetInstance(CultureInfo.GetCultureInfo(code));
          string longDate = 
              DateTime.Now.ToString(info.LongDatePattern, new System.Globalization.CultureInfo(code));
          

          【讨论】:

            【解决方案5】:

            DateTime.ToString() 有另一个重载,您可以使用它指定您想要的模式(因为您当前是要使用的文化。试试:

            myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern,
                                           ci);
            

            【讨论】:

              猜你喜欢
              • 2018-08-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-12-24
              相关资源
              最近更新 更多