2012-12-13 35 views
8

Vâng, Tôi đang cố gắng định dạng ngày mặc định của một nền văn hóa.Cách tìm định dạng ngày mặc định của Văn hóa

Ví dụ: en-us có "m/dd/yyyy", en-uk 'd/mm/yyyy'. Văn hóa có thể là bất cứ thứ gì ở máy khách. và Dateformat cũng có thể là bất cứ thứ gì. thích cho văn hóa là en-us nhưng dateformat là dd-MMM-yyyy.

vì vậy trường hợp này tôi muốn lấy ShortDateformatString dưới dạng m/dd/yyyy không dd-MMM-yyyy.

tôi đã cố gắng làm điều này cho tất cả các nền văn hóa bằng cách sử dụng:

string _cultureInfo = CultureInfo.CurrentCulture.IetfLanguageTag; 
CultureInfo shortDatefomatString = new CultureInfo(_cultureInfo); 
string old = shortDatefomatString.DateTimeFormat.ShortDatePattern; 

nhưng nó luôn luôn trả mt các dd-MMM-yyyy. tôi cần một cái mặc định không phải là bộ trên máy.

Trả lời

3

Tôi tin rằng vấn đề là cách bạn đang truy xuất văn hóa mong muốn.

này nên cung cấp cho bạn các thiết lập mặc định văn hóa:

var cultureLanguageTag = CultureInfo.CurrentCulture.IetfLanguageTag; 
var defaultCulture = CultureInfo.GetCultureInfoByIetfLanguageTag(cultureLanguageTag); 

Xây dựng một với một chuỗi là nghĩa vụ phải được sử dụng với tên văn hóa, tôi không biết nếu nó sẽ làm việc với thẻ IETF, nó có thể vừa quay trở lại văn hóa hiện tại trong trường hợp đó.

+0

Điều này hoạt động và cung cấp cho đầu ra đúng. mặc định dateformat. – user1899600

1

Theo MSDN, CurrentCulture sẽ trở lại với nền văn hóa theo một trong các cách sau:

  1. Nó trả CultureInfo.DefaultThreadCurrentCulture nếu nó không phải là null. (Lưu ý rằng trừ khi bạn đặt một nền văn hóa cụ thể, điều này sẽ luôn là rỗng.)
  2. Nó trả về kết quả của việc gọi hàm Windows 'GetUserDefaultLocaleName. Thao tác này sẽ trả lại bất kỳ Văn hóa nào bạn đặt trong Bảng điều khiển.

Có thể nếu bạn thay đổi văn hóa trong Pa-nen điều khiển, bạn sẽ không thấy thay đổi cho đến khi bạn khởi động lại máy tính.

Để kiểm tra xem văn hóa có hiển thị đúng ngày hay không, bạn có thể chọn văn hóa thay vì sử dụng văn bản hệ thống bằng cách sử dụng CultureInfo.CreateSpecificCulture("en-US"); (thay thế "en-US" bằng mã văn hóa của các quốc gia khác).

+0

CreateSpecificCulture cũng cung cấp cho chỉ các thiết lập hiện hành. Cảm ơn câu trả lời. – user1899600

0

Phần sau có vẻ phù hợp với tôi.

Console.WriteLine(CultureInfo.GetCultureInfo("en-us").DateTimeFormat.ShortDatePattern); 
Console.WriteLine(CultureInfo.GetCultureInfo("en-gb").DateTimeFormat.ShortDatePattern); 

Output: M/d/yyyy dd/MM/yyyy

+0

trong trường hợp văn hóa hiện tại là giống nhau và định dạng Shortdate là khác nhau. đầu ra sẽ khác. – user1899600

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