如何设置"默认" AbbreviatedMonthNames中? (C#)

时间:2015-02-03 17:54:10

标签: c# datetime-format

有没有办法在C#中设置AbbreviatedMonthNames的默认值?

e.g。在MSDN上,它为属性提供了以下用途:

  CultureInfo ci = CultureInfo.CreateSpecificCulture("en-US");
  DateTimeFormatInfo dtfi = ci.DateTimeFormat;
  dtfi.AbbreviatedMonthNames = new string[] { "of Jan", "of Feb", "of Mar", 
                                              "of Apr", "of May", "of Jun", 
                                              "of Jul", "of Aug", "of Sep", 
                                              "of Oct", "of Nov", "of Dec", "" };  
  dtfi.AbbreviatedMonthGenitiveNames = dtfi.AbbreviatedMonthNames;
  DateTime dat = new DateTime(2012, 5, 28);

  for (int ctr = 0; ctr < dtfi.Calendar.GetMonthsInYear(dat.Year); ctr++)
     Console.WriteLine(dat.AddMonths(ctr).ToString("dd MMM yyyy", dtfi));

但如果我只想使用

怎么办?
Console.WriteLine(dat.AddMonths(ctr).ToString("dd MMM yyyy");

......让它使用当前的文化是什么?即无需创建dtfi的新实例?

现在,似乎我目前的文化是en-GB然后它运作良好,但对于其他文化,它将月份缩写为数字。

3 个答案:

答案 0 :(得分:1)

ToString()(和格式等)需要一种文化来格式化日期/时间。它离不开它。因此,如果您没有通过明确的文化来使用,它只需要当前线程的默认文化。

幸运的是,您可以非常轻松地更改当前线程的文化 - 只需设置System.Threading.Thread.CurrentThread.CurrentCulture即可。请注意,您可能想要简单地修改这种文化 - 但您无法做到。它是只读的。您需要首先Clone(),然后修改克隆,然后重新设置它。

瞧!香草ToString()现在使用您的特定设置。

var ci = Thread.CurrentThread.CurrentCulture.Clone();
var dtfi = ci.DateTimeFormat;
dtfi.AbbreviatedMonthNames = new string[] { "of Jan", "of Feb", "of Mar",
                                          "of Apr", "of May", "of Jun",
                                          "of Jul", "of Aug", "of Sep",
                                          "of Oct", "of Nov", "of Dec", ""};
dtfi.AbbreviatedMonthGenitiveNames = dtfi.AbbreviatedMonthNames;
Thread.CurrentThread.CurrentCulture = ci;

当然,每个帖子只需要执行一次。

答案 1 :(得分:0)

以下是您可以构建string.Format来获取所需格式的方式:

string.Format("{0:dd} of {0:MMM yyyy}", myDate);

在您的代码中,它看起来像这样:

for (int ctr = 0; ctr < dtfi.Calendar.GetMonthsInYear(dat.Year); ctr++)
{
    var myDate = dat.AddMonths(ctr);
    Console.WriteLine(string.Format("{0:dd} of {0:MMM yyyy}", myDate))
}

答案 2 :(得分:0)

您可以通过创建该月的日期并格式化结果来获取月份名称

dtfi.AbbreviatedMonthNames = new string[12];
for (int m = 1; m <= 12; m++) {
    dtfi.AbbreviatedMonthNames[m] = new DateTime(2015, m, 1).ToString("MMM");
}