我想知道 .NET 中是否有任何内置功能可以在支持名词词尾变化的语言中减少日期, (即,在俄语中,月份名称是
февраль
,但如果我想说日期或说某件事截止日期,我会使用 февраля
形式)。我制作了自己的版本,适用于这种情况,但我需要扩展到其他情况和其他语言,这些语言将有自己的日期变化。
此功能是内置的还是在外部库中可用?谢谢您的帮助。
如果我的解释不清楚,我已经提供了俄语属格情况的函数。
public static string DeclineMonth(this DateTime time)
{
var month = time.ToString("MMMM");
if (month.Last() == 'ь')
return month.Replace('ь', 'я');
else
return month + "a";
}
您可以在two情况下获得月份名称,主格:
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]);
不支持其他情况(例如与格、宾格),我们必须手动实现它们。
要获取“1 января 2023”而不是“1 январь 2023”,并获取“1 мая”而不是“1 май”,请使用以下代码:
CultureInfo culture = new CultureInfo("ru-RU");
culture.DateTimeFormat.MonthNames = culture.DateTimeFormat.MonthGenitiveNames;
culture.DateTimeFormat.AbbreviatedMonthNames = culture.DateTimeFormat.AbbreviatedMonthGenitiveNames;
string result1 = DateTime.Now.ToString("d MMMM yyyy", culture);
string result2 = DateTime.Now.ToString("d MMM", culture);