2017-02-09 28 views
38

Tôi đang tự hỏi nếu có bất kỳ built-in chức năng trong .NET để từ chối ngày bằng các ngôn ngữ có hỗ trợ declensions danh từ, (tức. Trong Nga vào tên tháng là февраль, nhưng nếu tôi muốn nói ngày hoặc nói rằng một cái gì đó là do, tôi muốn sử dụng mẫu февраля). Tôi đã tạo phiên bản của riêng mình, phiên bản này hoạt động cho trường hợp này, nhưng tôi sẽ cần phải mở rộng sang các trường hợp khác và các ngôn ngữ khác, sẽ có những thay đổi riêng cho những ngày tháng.Có built-in declensions Tên tháng trong C#

Chức năng này có được tích hợp sẵn hoặc có sẵn trong thư viện bên ngoài không? Cảm ơn bạn đã giúp đỡ.

Tôi đã cung cấp chức năng cho trường hợp di truyền của Nga, nếu giải thích của tôi không rõ ràng.

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

Trả lời

56

Bạn có thể lấy tên tháng trong hai trường hợp, được bổ nhiệm:

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

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

SỞ HỮU CÁCH:

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

Các trường hợp khác (ví dụ tặng cách, Accusative) không được hỗ trợ và chúng tôi phải triển khai chúng theo cách thủ công.

+4

@Dmirtry: Không biết rằng chúng tôi có những thứ như vậy trong .NET, nhưng nó đặt ra câu hỏi tại sao chúng dừng lại với gen –

+9

@Tim Schmelter: Ngay cả tiếng Nga có '6' * chuẩn * và' 5' * các trường hợp lỗi thời *; Phần Lan sử dụng '15', Hungary' 21' ... 'Genetive' ít nhất là sử dụng điển hình –

+2

Cảm ơn bạn, hoạt động tuyệt vời! Và như là một tiền thưởng, trả về tháng như trường hợp thấp hơn (mà bạn đã cho thấy trong các ý kiến ​​mã của bạn, nhưng tôi đã bỏ lỡ nó, vì vậy tôi rất hài lòng)! – Kolichikov

Các vấn đề liên quan