Как отформатировать дату в виде локализованной короткой строки месяца

StackOverflow https://stackoverflow.com/questions/2787235

  •  03-10-2019
  •  | 
  •  

Вопрос

Я хотел бы отформатировать DateTime в строку, содержащую имя месяца сокращенно, и дата использования в метках оси в графе.

Строки формата DateTime по умолчанию не содержат сокращенного месяца. Я думаю, нет стандарта, но я мог бы взять подстроку первых 3 символов имени месяца и замените его в формат месяца. Причина, по которой я использовал месяц, заключается в том, что упорядочение месяца и даты зависит от локали.

У кого-нибудь есть лучшая идея?

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

Это было полезно?

Решение

Вы могли бы взять MonthDay Узор и заменить «мммм» с «ммм» - затем примените этот рисунок:

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"));

См. Раздел «Насколько стандартные форматические строки работают» на странице, на которую вы подключены для получения дополнительной информации.

Вы можете передать CulttureInfo в методе Date.toString (). Либо у вас есть определенная информация о культуре, или вы можете использовать CultureInfo.CurrentCulture:

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

Отредактировано: используйте date.ToString("d MMM"). Отказ Это покажет 7 сентября.

Вот решение, которое я придумал для подобной ситуации желания локализованной версии 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»).

Быстро, легко и делает работу.

CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Month).Substring(0,3);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top