【问题标题】:DateTime standard format for day, month and yearDateTime 日、月、年的标准格式
【发布时间】:2018-11-22 16:33:58
【问题描述】:

是否有任何标准的日期时间格式来显示“[日] [月] [年]”? 我不希望使用自定义格式字符串,因为它剥夺了根据国家/地区确定“日”和“月”顺序的能力。 例如,“en-us”是“11 月 22 日”,在法国是第一天,所以是“22 Novembre”

只是为了像这样显示日期和月份,我知道我可以使用“M”标准格式字符串。

但是我怎么写“2018 年 11 月 22 日”呢?

我是否需要像这样连接两个字符串:

$"{dt.ToString("M")}, {dt.ToString("yyyy")}"

还有其他方法吗?

【问题讨论】:

  • 那你想要什么? “日月、年”,还是每个国家都有自己的格式?
  • 每个国家都有自己的格式
  • 但只是年月日
  • 你的项目是什么类型的? WinForms、MVC、WPF..等等?
  • 它是 WPF,但我认为没关系,它是 NET

标签: c# .net


【解决方案1】:

完整选项不可用似乎有点奇怪。我可以建议的最接近的方法是使用自定义格式,但不要提供您自己的格式,而是抓住DateTimeFormatInfo.LongDatePattern 并删除任何出现的“dddd”(及其周围的空格/标点符号)。

这应该会给您提供您想要的跨文化差异,同时消除工作日。


例子:

  en-US => dddd, MMMM dd, yyyy => MMMM dd, yyyy => November 22, 2018

  fr-FR => dddd d MMMM yyyy    => d MMMM yyyy   => 22 novembre 2018

【讨论】:

    【解决方案2】:

    据我了解,您的问题的解决方案可能是创建一个新的 CultureInfo 对象。

    我已经测试过了。

    CultureInfo us = new CultureInfo("en-US");
    string usDate = us.DateTimeFormat.ShortDatePattern;
    
    CultureInfo fr = new CultureInfo("fr-FR");
    string frDate = fr.DateTimeFormat.ShortDatePattern;
    
    Console.WriteLine(usDate);
    Console.WriteLine(frDate);
    
    //Apply the country format here.
    var localDate = DateTime.Now.ToString(frDate); 
    
    Console.WriteLine(localDate);
    

    所以格式输出将是您提供的位置格式。

    M/d/yyyy ---> USA format.
    dd/MM/yyyy ---> France format.
    
    22/11/2018 ---> France format applied to the current date.
    

    如需更多信息,请重定向至: CultureInfo Class

    【讨论】:

      【解决方案3】:

      $"{dt.ToString("MMMM dd, yyyy")}"

      这将显示为 2018 年 11 月 22 日,假设为 dt 分配了此日期。 另外,请查看Custom Date Time Format String

      【讨论】:

      • 感谢您的回复。请仔细阅读问题,我提到它必须考虑本地化,我举了一个例子。
      • 这对我来说似乎几乎是一个正确的答案,不是吗?如果指定为第二个参数,它会以任何当前给定的文化或任何其他文化显示“[月] [日]、[年]”。为什么是“几乎”?因为对于俄语来说,它说“ноября 22, 2018”,这在语法上是不正确的。
      • 我很抱歉,当我看到问题并回答时事情发生了变化,在我发布之前我没有检查是否有任何进一步的条目。这是我的错。
      • @Raarge 从一开始就谦逊。得到我的赞成票。欢迎来到 SO!
      【解决方案4】:

      您可以从当前区域性中获取LongDatePattern,然后使用正则表达式删除星期几 (dddd) 和周围的字符。下面,我假设逗号、句点和空格是唯一的分隔符,但如果您遇到其他分隔符,您可能需要相应地修改正则表达式。

      string longDatePattern = CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern;
      string modifiedDatePattern = Regex.Replace(longDatePattern, @"[,.]?\s?d{4}[,.]?\s?", "");
      
      Console.WriteLine(longDatePattern);      //  "dddd, MMMM d, yyyy"
      Console.WriteLine(modifiedDatePattern);  //  "MMMM d, yyyy"
      

      现在您有了可以应用的自定义格式:

      string s = DateTime.Now.ToString(modifiedDatePattern);
      
      Console.WriteLine(s);  // "November 22, 2018"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-29
        • 2015-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多