2017-02-09 36 views
38

Мне интересно, есть ли встроенные функции .NET для снижения дат на языках, поддерживающих объявления существительных, (т.е. на русском языке имя месяца: февраль, но если бы я хотел сказать дату или сказать, что что-то причитается, я бы использовал форму февраля). Я сделал свою собственную версию, которая работает для этого случая, но мне нужно будет перейти на другие случаи и на другие языки, которые будут иметь свои собственные объявления для дат.Есть ли встроенные объявления в названиях дней в C#

Является ли эта функциональность встроенной или доступной во внешней библиотеке? Спасибо за любую помощь.

Я предоставил свою функцию для родительского случая в России, если мое объяснение не было ясным.

public static string DeclineMonth(this DateTime time) 
{ 
    var month = time.ToString("MMMM"); 
    if (month.Last() == 'ь') 
     return month.Replace('ь', 'я'); 
    else 
     return month + "a"; 
}  

ответ

56

Вы можете получить название месяца в два случаях Номинативного:

DateTimeFormatInfo info = CultureInfo.GetCultureInfo("ru-RU").DateTimeFormat; 

// February: 2 - 1 (array is zero based) - "Февраль" 
Console.Write(info.MonthNames[2 - 1]); 

И Родительного:

// February: 2 - 1 (array is zero based) - "февраля" 
Console.Write(info.MonthGenitiveNames[2 - 1]); 

Других случаи (например, Дательный, Accuative) не поддерживаются, и мы должны их реализовать вручную.

+4

@ Dmirtry: Не знал, что у нас такие вещи в .NET, но это поднимает вопрос, почему они остановились с родительным падежом –

+9

@Tim Schmelter: Даже у русских есть '6' * standard * и' 5' * устаревшие * случаи; Финский использует '15', венгерский' 21' ... 'Genetive', по крайней мере, в обычном использовании –

+2

Спасибо, отлично работает! И в качестве бонуса возвращает месяц в виде нижнего регистра (который вы указали в комментариях к коду, но я пропустил его, поэтому я был доволен)! – Kolichikov