2009-06-10 45 views
73

Làm cách nào để tìm kiếm tên tháng trong C#? Tôi không muốn viết một tuyên bố lớn switch hoặc tuyên bố if vào tháng int. Trong VB.Net bạn có thể sử dụng MonthName(), nhưng còn C# thì sao?Cách lấy tên tháng trong C#?

+0

có thể trùng lặp của [Cách tốt nhất để biến một số nguyên vào một tên tháng trong C#?] (Http://stackoverflow.com/questions/218908/best-way-to-turn-an- integer-into-a-month-name-in-c) – bluish

Trả lời

143

Bạn có thể sử dụng CultureInfo để có được những tên tháng. Bạn thậm chí có thể nhận được tên tháng ngắn cũng như những điều thú vị khác.

Tôi khuyên bạn nên đưa các phương thức này vào các phương pháp mở rộng, điều này sẽ cho phép bạn viết ít mã hơn sau. Tuy nhiên bạn có thể thực hiện tuy nhiên bạn thích.

Dưới đây là một ví dụ về cách để làm điều đó bằng phương pháp khuyến nông:

using System; 
using System.Globalization; 

class Program 
{ 
    static void Main() 
    { 

     Console.WriteLine(DateTime.Now.ToMonthName()); 
     Console.WriteLine(DateTime.Now.ToShortMonthName()); 
     Console.Read(); 
    } 
} 

static class DateTimeExtensions 
{ 
    public static string ToMonthName(this DateTime dateTime) 
    { 
     return CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(dateTime.Month); 
    } 

    public static string ToShortMonthName(this DateTime dateTime) 
    { 
     return CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(dateTime.Month); 
    } 
} 

Hope this helps!

+4

Tôi có thể thêm rằng có một thuộc tính 'InvariantInfo' có thể được sử dụng không. Và, theo ý kiến ​​của tôi, sau đây là một định dạng đơn giản/dễ đọc hơn để làm điều này: 'DateTimeFormatInfo.InvariantInfo.GetAbbreviatedMonthName (...)' hoặc 'DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName (...)' – bsara

104

Sử dụng định dạng "MMMM" specifier:

string month = dateTime.ToString("MMMM"); 
+16

giả sử bạn có một ngày. nếu không: 'var month = new DateTime (1, i, 1) .ToString (" MMMM ");' – Myster

9
string CurrentMonth = String.Format("{0:MMMM}", DateTime.Now) 
+0

Bạn không cần ToString(). –

+5

Hoặc String.Format, thực sự. Chỉ DateTime.Now.ToString ("MMMM") đơn giản hơn. –

+1

Tôi cũng đã đề xuất điều đó, nhưng bạn đã có câu trả lời đó như một câu trả lời khác. Phương pháp của Gortok cũng thể hiện việc sử dụng trình giữ chỗ để thực hiện định dạng, vì vậy tôi nghĩ đó là một ví dụ thay thế tốt. –

5

Nếu bạn chỉ muốn sử dụng MonthName sau đó tham khảo Microsoft.VisualBasic và nó trong Microsoft.VisualBasic.DateAndTime

//eg. Get January 
String monthName = Microsoft.VisualBasic.DateAndTime.MonthName(1); 
4

Giả sử ngày của bạn là ngày hôm nay. Hy vọng điều này sẽ giúp bạn.

DateTime dt = DateTime.Today; 

string thisMonth= dt.ToString("MMMM"); 

Console.WriteLine(thisMonth); 
-7
private string MonthName(int m) 
    { 
     string res; 
     switch (m) 
     { 
      case 1: 
       res="Ene"; 
       break; 
      case 2: 
       res = "Feb"; 
       break; 
      case 3: 
       res = "Mar"; 
       break; 
      case 4: 
       res = "Abr"; 
       break; 
      case 5: 
       res = "May"; 
       break; 
      case 6: 
       res = "Jun"; 
       break; 
      case 7: 
       res = "Jul"; 
       break; 
      case 8: 
       res = "Ago"; 
       break; 
      case 9: 
       res = "Sep"; 
       break; 
      case 10: 
       res = "Oct"; 
       break; 
      case 11: 
       res = "Nov"; 
       break; 
      case 12: 
       res = "Dic"; 
       break; 
      default: 
       res = "Nulo"; 
       break; 
     } 
     return res; 
    } 
+8

Điều này không trả lời câu hỏi của OP, bởi vì họ nói: "Tôi thực sự không ** không muốn viết một tuyên bố chuyển đổi lớn [...]" (nhấn mạnh của tôi). Vui lòng đọc câu hỏi chi tiết trước khi viết câu trả lời. – honk

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