如何将日期格式化为本地化的Short MonthDay字符串
我想将DateTime格式化为一个字符串,其中包含缩写的月份名称和图表中轴标签的使用日期。
默认的DateTime格式字符串不包含缩写月份。 我想没有标准,但我可以获取月份名称的前3个字符的子字符串,并将其替换为MonthDay格式。 我使用MonthDay的原因是月份和日期的顺序取决于语言环境。
有没有人有更好的主意?
http://msdn.microsoft.com/en-us/library/az4se3k1.aspx#MonthDay
您可以采用MonthDay
模式并将“MMMM”替换为“MMM” – 然后应用该模式:
string pattern = CultureInfo.CurrentCulture.DateTimeFormat.MonthDayPattern; pattern = pattern.Replace("MMMM", "MMM"); string formatted = dateTime.ToString(pattern);
它有点粗糙,但我相信它会起作用。
您可以使用自定义字符串格式化程序执行此操作:
DateTime now = DateTime.Now; Console.WriteLine("{0}", now.ToString("ddd MMMM dd"));
有关详细信息,请参阅链接到的页面上的“标准格式字符串的工作原理”部分。
编辑:使用date.ToString("d MMM")
。 它将显示7 sep 。
这是我想出的类似情况想要本地化版本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’)的额外填充字符。
您可以在Date.ToString()方法中传递CultureInfo。 您可以使用特定的文化信息,也可以使用CultureInfo.CurrentCulture:
var date = DateTime.Now; var ci = new CultureInfo("de-CH"); var output = date.ToString("d MMM", ci);
快速,轻松,完成工作。
CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Month).Substring(0,3);