Dot-Net

如何在沒有工作日的情況下從 DateTime 獲取長日期格式

  • September 8, 2009

我正在尋找一種在沒有工作日的情況下獲取長日期時間的區域感知方式。竟然有這樣的野獸?

下面是我用來獲取包括工作日在內的長日期格式的程式碼:

DateTime time = ...
String formattedDate = time.ToLongDateString();

編輯

我想看到的例子:

  • zh-cn:2009 年 12 月 5 日
  • FR-FR:2009 年 12 月 5 日
  • zh-CN: 2009 年 12 月 5 日

ToLongDateString() 返回以下內容:

  • zh-cn:2009 年 12 月 5 日,星期六
  • fr-fr:2009 年 12 月 5 日,星期六
  • zh-CN:2009 年 12 月 5 日,星期六

這似乎奏效了。

  1. 枚舉所有有效的日期時間模式: CultureInfo.DateTimeFormat.GetAllDateTimePatterns
  2. 選擇最長的模式(大概這是最好的匹配):
  • 是 CultureInfo.DateTimeFormat.LongDatePattern 的子字元串
  • 不包含“ddd”(短日名稱)
  • 不包含“dddd”(長日名稱)

這似乎提出了我正在尋找的字元串。

請參見下面的程式碼:

class DateTest
{
   static private string GetDatePatternWithoutWeekday(CultureInfo cultureInfo)
   {
       string[] patterns = cultureInfo e.DateTimeFormat.GetAllDateTimePatterns();

       string longPattern = cultureInfo.DateTimeFormat.LongDatePattern;

       string acceptablePattern = String.Empty;

       foreach (string pattern in patterns)
       {
           if (longPattern.Contains(pattern) && !pattern.Contains("ddd") && !pattern.Contains("dddd"))
           {
               if (pattern.Length > acceptablePattern.Length)
               {
                   acceptablePattern = pattern;
               }
           }
       }

       if (String.IsNullOrEmpty(acceptablePattern))
       {
           return longPattern;
       }
       return acceptablePattern;
   }

   static private void Test(string locale)
   {
       DateTime dateTime = new DateTime(2009, 12, 5);

       Thread.CurrentThread.CurrentCulture  = new CultureInfo(locale);

       string format = GetDatePatternWithoutWeekday(Thread.CurrentThread.CurrentCulture);

       string result = dateTime.ToString(format);

       MessageBox.Show(result);            
   }
}

從技術上講,如果長格式將當天的名稱夾在中間,它可能不會起作用。為此,我應該選擇具有最長公共子字元串而不是最長精確匹配的模式。

引用自:https://stackoverflow.com/questions/1395022