2010-05-07 91 views
3

我想將日期時間格式化爲包含月份名稱縮寫的字符串以及圖形中軸標籤中使用的日期。如何將日期格式化爲本地化短日月字符串

默認的DateTime格式字符串不包含縮寫月份。我想沒有標準,但我可以採取月份名稱的前3個字符的子字符串,並將其替換爲MonthDay格式。我將使用MonthDay的原因是月份和日期的排序依賴於語言環境。

有沒有人有更好的主意?

http://msdn.microsoft.com/en-us/library/az4se3k1.aspx#MonthDay

回答

15

你可以採取MonthDay模式和替換「MMMM」與「MMM」 - 然後應用模式:

string pattern = CultureInfo.CurrentCulture.DateTimeFormat.MonthDayPattern; 
pattern = pattern.Replace("MMMM", "MMM"); 
string formatted = dateTime.ToString(pattern); 

這有點粗糙,但我相信它會工作。

+0

這將無法正常工作,如果有(或將會)模式「MMMMM」:)太糟糕了,佔位符沒有明確的限制。 – 2012-03-29 11:20:47

+0

不錯的解決方案Jon Skeet順便說一句,它是如何提出像2014-sep-10(yyyy-MMM-dd) – Gayan 2014-09-26 10:58:45

+0

@GayanRanasinghe:你是什麼意思的「它是如何提出的」? – 2014-09-26 11:08:26

1

編輯:使用date.ToString("d MMM")。它會顯示7 sep

+0

他真正想要的縮短版,所以它應該是date.ToString(「d MMM」) – 2010-05-07 08:45:58

2

您可以使用自定義字符串格式化做到這一點:

DateTime now = DateTime.Now; 
Console.WriteLine("{0}", now.ToString("ddd MMMM dd")); 

看你鏈接到更多的信息頁面上的「如何標準格式字符串工作」。

+1

@Matt:雖然不會提供依賴於語言環境的排序:「我使用MonthDay的原因是月份和日期的排序依賴於語言環境。」 – 2010-05-07 08:55:23

+0

@Jon是好點,我錯過了那一點。 – 2010-05-07 09:53:40

0

這裏是我想出了想要的01/29本地化版本的類似情況的解決方案:

Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yy(yy)?[/\.\- ]|[/\.\- ]yy(yy)?)", "") 

這裏是格式輸出所有文化,所以你可以看它是否會爲你工作:

CultureInfo.GetCultures(CultureTypes.AllCultures) 
    .Select(c => new { 
     c.Name, 
     c.DateTimeFormat.MonthDayPattern, 
     c.DateTimeFormat.ShortDatePattern, 
     DayMonth1 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"[/\.\- ]?yy[/\.\- ]?", ""), 
     DayMonth2 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yyyy[/\.\- ]|[/\.\- ]yyyy|yy[/\.\- ]|[/\.\- ]yy)", ""), 
     DayMonth3 = Regex.Replace(c.DateTimeFormat.ShortDatePattern, @"(yy(yy)?[/\.\- ]|[/\.\- ]yy(yy)?)", "") 
    }) 
    .OrderBy(x => x.Name) 
    .Dump(); 

DateMonth1替換將移除額外的填充字符的一對夫婦培養物(特別「BG」)。

0

快速,簡單,並完成工作。

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Month).Substring(0,3); 
+0

輸出也應該包括年份和日期,這些項目的順序應該由當前文化決定。 – Wouter 2015-01-18 16:33:00

1

您可以在Date.ToString()方法中傳遞CultureInfo。要麼你有一個特定的文化信息,或者您可以使用CultureInfo.CurrentCulture:

var date = DateTime.Now; 
var ci = new CultureInfo("de-CH"); 
var output = date.ToString("d MMM", ci); 
相關問題