C# 中是否有内置的月份名称变形

问题描述 投票:0回答:2

我想知道 .NET 中是否有任何内置功能可以在支持名词词尾变化的语言中减少日期, (即,在俄语中,月份名称是

февраль
,但如果我想说日期或说某件事截止日期,我会使用
февраля
形式)。我制作了自己的版本,适用于这种情况,但我需要扩展到其他情况和其他语言,这些语言将有自己的日期变化。

此功能是内置的还是在外部库中可用?谢谢您的帮助。

如果我的解释不清楚,我已经提供了俄语属格情况的函数。

public static string DeclineMonth(this DateTime time)
{
    var month = time.ToString("MMMM");
    if (month.Last() == 'ь')
        return month.Replace('ь', 'я');
    else
        return month + "a";
}       
c# .net datetime datetime-format globalization
2个回答
56
投票

您可以在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]);

不支持其他情况(例如与格宾格),我们必须手动实现它们。


0
投票

要获取“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);
© www.soinside.com 2019 - 2024. All rights reserved.