2014-06-24 2 views
0

Я хочу отобразить список дат в приложении WPF в коротком формате даты с проложенными днями и месяцами.Чувствительность к культуре DateTime.ToString с dd и MM

В частности, в Австралии/Великобритании это должно выглядеть как dd/MM/yyyy. В США это будет выглядеть как MM/dd/yyyy

Есть ли чувствительный к культуре простой/простой метод или шаблон, который я могу использовать для этого?

DateTime.ToShortDateString() 

не складывается день и месяц.

+0

что вы подразумеваете под набивкой? –

+0

формат dd будет заполнять дату «0», если это всего лишь одна цифра. т.е. первое ноября в Австралии будет 01/11 вместо 1/11 – hitch

+0

Похоже, что Джон Скит обращается к аналогичной проблеме здесь: http://stackoverflow.com/questions/9006806/get-culture-specific-date-with -2-digit-year-in-c-sharp? Rq = 1 – hitch

ответ

0

CultureInfo встроен в .NET framework, так что вам не нужно беспокоиться о деталях дат форматирования для каждой культуры. Поэтому вы должны просто сделать DateTime.ToShortDateString() и сделать это.

Это, как говорится, мы можем изменить CultureInfo ShortDatePattern, чтобы получить то, что вы хотите.

static void Main() 
{ 
    DateTime date = new DateTime(2014, 1, 2); 

    // Change our CuurentCulture to: US 
    CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-us"); 

    // Standard format for US: 1/2/2014 
    Console.WriteLine(date.ToString("d"));   

    // Force leading zero on month and day for US format: 01/02/2014 
    Console.WriteLine(GetShortDateString(date)); 



    // Change our CuurentCulture to: AU 
    CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-au"); 

    // Standard format for AU: 2/01/2014 
    Console.WriteLine(date.ToString("d")); 

    // Force leading zero on day for AU format: 02/01/2014 
    Console.WriteLine(GetShortDateString(date));   
} 

static string GetShortDateString(DateTime date) 
{ 
    string format = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern; 

    if (!format.Contains("dd")) 
     format = format.Replace("d", "dd"); 

    if (!format.Contains("MM")) 
     format = format.Replace("M", "MM"); 

    return date.ToString(format); 
} 
+0

Как всегда, я просто придумал аналогичный ответ. Собирался идти с: dt.ToString (d.ShortDatePattern.Replace («dd», «d»). Заменить («d», «dd»). Заменить («MM», «M»). Заменить («М», «ММ»))) Спасибо за помощь. – hitch

1

Посмотрите на класс DateTimeFormatInfo, который форматирует DateTime значений в зависимости от культуры.

+0

Я не вижу никаких методов или свойств в этом классе, которые помогут мне форматировать строку, как я указал. Можете ли вы предоставить дополнительную информацию? – hitch

Смежные вопросы