2010-12-28 53 views
14

Làm cách nào để tôi có được định dạng ngày đề cập dưới đây trong C#.Làm cách nào để tạo định dạng Ngày như "ngày 1 tháng 11" trong C#

  • Đối với 1-Nov-2010 nó sẽ hiển thị như sau: 01 tháng 11

  • Đối với 30-Nov-2010 nó sẽ hiển thị như sau: ngày 30 tháng 11

Chúng ta có thể làm sử dụng bất kỳ định dạng ngày nào hoặc tạo một hàm tùy chỉnh trả về cho 1 -> 'st', 2-> 'nd' 3-> 'rd', bất kỳ ngày nào không -> 'th'.

Trả lời

32

Các mã sau đây được dựa trên đó answer mà tạo ra một thứ tự từ một số nguyên:

public static string ToOrdinal(int number) 
{ 
    switch(number % 100) 
    { 
     case 11: 
     case 12: 
     case 13: 
      return number.ToString() + "th"; 
    } 

    switch(number % 10) 
    { 
     case 1: 
      return number.ToString() + "st"; 
     case 2: 
      return number.ToString() + "nd"; 
     case 3: 
      return number.ToString() + "rd"; 
     default: 
      return number.ToString() + "th"; 
    } 
} 

Hơn bạn có thể tạo ra chuỗi đầu ra của bạn:

public static string GenerateDateString(DateTime value) 
{ 
    return string.Format(
     "{0} {1:MMMM}", 
     ToOrdinal(value.Day), 
     value);    
} 
+0

câu trả lời thực sự tuyệt vời :) –

+0

Thực sự tuyệt vời của nó. Tiết kiệm được nhiều thời gian. :) – SarangK

0

Tôi chắc chắn không có thường trình dữ liệu để hiển thị ngày là ngày 1 hoặc 30.

Gần đây tôi đã viết một số mã như vậy từ đầu. Tôi nghĩ bạn sẽ cần phải làm như vậy.

Tôi không có mã của mình tiện dụng nhưng tôi vừa tạo một chuỗi ký tự với các chữ cái cho mỗi số ("th", "st", "nd", "rd", "th", v.v ...). Sau đó mod lên 10 và sử dụng phần còn lại làm chỉ mục vào mảng. Bạn chỉ có thể nối chuỗi đó vào số của bạn.

+0

Tôi cũng nghĩ như vậy. –

+1

mod chống lại 10 là không đủ tốt, bởi vì sau đó bạn sẽ có 11 và 12. –

+0

Vâng, tôi biết tôi đã làm việc đó. Tôi đoán tôi đã có một vài trường hợp ngoại lệ cho thanh thiếu niên. –

0

Bạn có thể sử dụng Regular Expressions để trích xuất ngày và tháng. Sau đó, lưu trữ tất cả tên của các tháng trong một mảng và sử dụng .startsWith để có được tên riêng của tháng. Bạn có thể sử dụng đơn giản case để xem bạn có cần 'st', 'nd', 'rd' hoặc 'th' hay không.

1

somthing như thế này nên làm việc ...

using System; 
using System.Text; 

namespace Program { 


class Demo { 
     static string[] extensions = 
     // 0  1  2  3  4  5  6  7  8  9 
     { "th", "st", "nd", "rd", "th", "th", "th", "tn", "th", "th", 
     // 10 11 12 13 14 15 16 17 18 19 
      "th", "th", "th", "th", "th", "th", "th", "tn", "th", "th", 
     // 20 21 22 23 24 25 26 27 28 29 
      "th", "st", "nd", "rd", "th", "th", "th", "tn", "th", "th", 
     // 30 31 
      "th", "st" }; 

    public static void Main() { 
    String strTestDate = "02-11-2007"; 
    DateTime coverdate = DateTime.ParseExact(strTestDate, "dd-MM-yyyy", null); 
    string s = coverdate.ToString(" MMMM yyyy"); 
    string t = string.Format("{0}{1}",coverdate.Day,extensions[coverdate.Day]); 
    string result = t + s; 


    } 
    } 
} 
2

Vì vậy, đây là giải pháp phong phú với các phương pháp mở rộng. Làm việc cho C# 3.0 trở lên. Chủ yếu là ăn cắp ý tưởng Nikhil của công việc:

public static class DateTimeExtensions 
{ 
     static string[] extensions = // 0 1 2 3 4 5 6 7 8 9 
      { "th", "st", "nd", "rd", "th", "th", "th", "tn", "th", "th", 
       // 10 11 12 13 14 15 16 17 18 19 
       "th", "th", "th", "th", "th", "th", "th", "tn", "th", "th", 
       // 20 21 22 23 24 25 26 27 28 29 
       "th", "st", "nd", "rd", "th", "th", "th", "tn", "th", "th", 
       // 30 31 
       "th", "st" 
      }; 
     public static string ToSpecialString(this DateTime dt) 
     { 
      string s = dt.ToString(" MMMM yyyy"); 
      string t = string.Format("{0}{1}", dt.Day, extensions[dt.Day]); 
      return t + s; 
     } 
} 

thử nghiệm/Sử dụng Như thế này:

Console.WriteLine(DateTime.Now.ToSpecialString()); 
Console.WriteLine(new DateTime(1990, 11, 12).ToSpecialString()); 
Console.WriteLine(new DateTime(1990, 1, 1).ToSpecialString()); 
Console.WriteLine(new DateTime(1990, 1, 2).ToSpecialString()); 
Console.WriteLine(new DateTime(1990, 1, 3).ToSpecialString()); 
Console.WriteLine(new DateTime(1990, 1, 4).ToSpecialString()); 
Console.WriteLine(new DateTime(1990, 12, 15).ToSpecialString()); 
Console.WriteLine(new DateTime(1990, 8, 19).ToSpecialString()); 
Console.WriteLine(new DateTime(1990, 9, 22).ToSpecialString()); 
Console.ReadKey(); 

Hy vọng rằng sẽ giúp.

0

Tôi làm theo các chuỗi ví dụ blog từ JSL vscontrol và nó có một lỗi ở phần cuối ông đã quên concatenate số ngày tại đầu dòng vì vậy nó phải

return strNum + ordinal + str; 

và không!

return ordinal + str; 
+0

chuỗi tĩnh riêng Ordinal (Ngày giờ) { int dayvalue = Convert.ToInt32 (ngày tháng.Ngày); chuỗi strNum = dayvalue.ToString(); string ordinal = string.Empty; if (strNum.EndsWith ("0") || strNum.EndsWith ("4") || strNum.EndsWith ("5") || strNum.EndsWith ("6") || strNum.EndsWith ("7") || strNum.EndsWith ("8") || strNum.EndsWith ("9")) { thứ tự = "th"; } khác nếu (strNum.EndsWith ("1")) { thứ tự = "st"; } khác nếu (strNum.EndsWith ("2")) { thứ tự = "nd"; } else { thứ tự = "rd"; } chuỗi str = date.ToString ("MMMMM yyyy"); trả lại thứ tự + str; } –

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