如何使用选定的日期部分显示DateTime,但是按FormatProvider的顺序?

时间:2010-04-12 12:17:30

标签: .net datetime formatting

我希望按文化提供的顺序显示日期,但是只显示我想要的元素。

DateTime.Tostring()方法有a list of patterns that are very useful但我希望它有一个非常小的变化。

以下代码中使用的CultureInfo被选为示例,我不想依赖于CultureInfo的特定列表,如果可能的话

var now = DateTime.Now;

string nowString = now.ToString("m", CultureInfo.GetCultureInfo("en-us"));
Console.WriteLine(nowString);

nowString = now.ToString("m", CultureInfo.GetCultureInfo("fr-FR"));
Console.WriteLine(nowString);

显示:

  4月12日   12 avril

我想要一个显示月份和日期缩写的模式,但是它会保持指定CultureInfo的正确顺序。 使用模式“MMM dd ”将始终首先显示月份的缩写,然后是日期,例如打破法国订单。

没有太多的自定义代码可以实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

显然,微软“accepts”的日期格式如下:

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15);

Console.WriteLine(date1.ToString("ddd d MMM", 
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays Fri 29 Aug
Console.WriteLine(date1.ToString("ddd d MMM", 
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays ven. 29 août

所以不要认为框架为您的案例预览了一些内容。

您需要找到像这样的解决方法

private string GetCultureMonthDay(CultureInfo culture, DateTime date)
{
    return string.Format(culture, "{0:" + 
      culture.DateTimeFormat.MonthDayPattern.Replace("MMMM", "MMM") + "}", date);
}

用法:

?Console.WriteLine(GetCultureMonthDay(CultureInfo.GetCultureInfo("fr-FR"), now));
12 avr.

?Console.WriteLine(GetCultureMonthDay(CultureInfo.GetCultureInfo("en-US"), now));
Apr 12