2012-01-26 32 views
9

ngày tôi có một danh sách các địa chỉ email của những người có quốc tịch khác nhau (cho mỗi người tôi có mã iso)tháng DateTime.ToString và ngôn ngữ

khi tôi gửi email cho tất cả những người này, trong văn bản của thư tôi cần phải chuyển đổi một trường datetime thành một chuỗi được định dạng trong văn hóa cụ thể của chúng.

cho điều này tôi đang làm

CultureInfo ci = new CultureInfo(ISO); 
myStringDate = myDate.ToString(ci.DateTimeFormat.ShortDatePattern); 

và làm việc hoàn hảo, nhưng nếu tôi sử dụng LongDatePattern thay vì ngắn, để hiển thị ngày như "thứ Hai 13 tháng 6, 2010" tốt công việc của mình, ngoại trừ ngôn ngữ trong ngày và tháng.

nếu văn hóa người là it-IT tôi cần phải hiển thị "Martedi" và "Giugno" không phải là "thứ hai" và "June"

làm thế nào tôi có thể làm điều đó mà không cần thay đổi văn hóa giao diện người dùng hiện tại?

Trả lời

4

Sử dụng DateTimeFormatInfo lớp học.

string code = "mk-MK"; 
DateTimeFormatInfo info = 
    DateTimeFormatInfo.GetInstance(CultureInfo.GetCultureInfo(code)); 
string longDate = 
    DateTime.Now.ToString(info.LongDatePattern, new System.Globalization.CultureInfo(code)); 
+0

Đó là những gì anh ấy đã sử dụng 'ci.DateTimeFormat'. – Guffa

6

Bạn chỉ xác định mẫu định dạng, vì vậy phải có các cài đặt khác từ định dạng mặc định. Bạn cũng nên xác định các nhà cung cấp định dạng:

myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern, ci); 

hoặc bằng cách sử dụng chuỗi định dạng chuẩn D cho mẫu ngày dài (vì nó sẽ lấy mẫu thực tế từ các nhà cung cấp định dạng mà bạn chỉ định):

myStringDate = myDate.ToString("D", ci); 

Demo:

CultureInfo ci = new CultureInfo("it-IT"); 
Console.WriteLine(DateTime.Now.ToString("D", ci)); 
ci = new CultureInfo("sv-SE"); 
Console.WriteLine(DateTime.Now.ToString("D", ci)); 

Output:

0.123.
giovedì 26 gennaio 2012 
den 26 januari 2012 
2

DateTime.ToString() vẫn chưa một tình trạng quá tải mà bạn có thể xác định cả hai mô hình mà bạn muốn (như bạn hiện đang văn hóa để sử dụng. Hãy thử:

myStringDate = myDate.ToString(ci.DateTimeFormat.LongDatePattern, 
           ci); 
9

Những mẫu mô tả năm, tháng, ngày và tham số khác địa điểm trong đầu ra kết quả của Datetime. Nhưng tháng và ngày tên được lấy từ đối tượng CultureInfo, không phải mẫu. Có DateTime.ToString overload hỗ trợ thông qua tham số CultureInfo cùng với định dạng

 CultureInfo culture = new CultureInfo(ISO); 
     DateTime.Now.ToString(culture.DateTimeFormat.LongDatePattern, culture); 

Bằng cách này, ToString() sẽ tôn trọng cả hai mô hình và tên từ văn hóa quy định

2

Tôi chỉ có một vấn đề tương tự và giải quyết nó với:

DateTime.Now.ToString("dddd, dd MMMM yyyy", new System.Globalization.CultureInfo("it-IT")); 

Đó là nhờ this link.

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