2014-10-09 14 views
5

Đây là một điều lạ đối với bạn..ToShortDateString trả về định dạng văn hóa khác với mong đợi

Chúng tôi đã có giao diện C# đang chạy từ đầu năm mà không gặp sự cố trên máy tính Windows XP (32bit). Chúng tôi vừa nâng cấp PC lên Windows 7 (64bit) với các ứng dụng được cài đặt bởi SCCM.

Với lần chạy mới nhất, các ngày trong vùng văn bản đã bắt đầu xuất hiện ở định dạng Hoa Kỳ (5/2/2014) thay vì định dạng Anh (02/05/2014).

Mã đang được sử dụng là:

string Lines = FromFormat.Text + " from " + FromFormat.Charge_From.ToShortDateString() + " to " + FromFormat.Charge_To.ToShortDateString() +"."; 

đâu FromFormat là một đối tượng với các nguồn dữ liệu, Charge_From & Charge_To là DataTime biến.

Chúng tôi đã kiểm tra các thiết lập khu vực của máy tính và tạo ra một ứng dụng thử nghiệm nhỏ để hiển thị các thiết lập của máy tính từ Net cả hai được thiết lập như là định dạng UK Mã cho ứng dụng thử nghiệm:

label1.Text = DateTime.Now.ToString(); 
label2.Text = DateTime.Now.ToString("dd MMM yyyy"); 
label3.Text = DateTime.Now.ToShortDateString(); 
label4.Text = Thread.CurrentThread.CurrentCulture.EnglishName; 

Tôi biết rằng Tôi có thể thay thế ToShortDateString() bằng một số ToString("dd/MM/yyyy") để buộc định dạng đúng nhưng câu hỏi của tôi là tại sao điều này lại xảy ra?

Có liên quan gì đến việc nâng cấp Windows 7 không? hoặc SCCM?

Cảm ơn trước

+0

'CurrentCulture' của bạn là gì? Có phải «en-GB' hoặc' en-US'? –

+0

_ "Tôi biết rằng tôi có thể thay thế ToShortDateString() bằng ToString (" dd/MM/yyyy ") để buộc định dạng đúng" _ Không đúng, 'ToString (" dd/MM/yyyy ")' cũng sẽ sử dụng dấu phân tách ngày của văn hóa curent thay vì '/'. –

+0

Theo như tôi có thể nói tất cả các PC đang sử dụng en-GB – Tony

Trả lời

0

Sau khi kiểm tra nhiều và gãi đầu của chúng tôi nghĩ rằng chúng tôi đã tìm thấy một câu trả lời cho điều này.

Trong quá trình thử nghiệm, chúng tôi nhận thấy rằng PC đã cài đặt giao diện qua SCCM (chỉ Windows 7) đang tạo văn bản có định dạng ngày của Hoa Kỳ nhưng văn bản được nhấp qua Trực tiếp Click một lần (chủ yếu là XP).

Kiểm tra thêm xác nhận rằng nếu chúng tôi đã cài đặt Windows 7 PC qua Click Khi chúng tôi có văn bản định dạng ngày của Vương quốc Anh.Sau khi rất nhiều nhầm lẫn, chúng tôi nhận thấy rằng khi SCCM cài đặt giao diện, nó đã cài đặt phiên bản RTM của Trình xem Báo cáo nhưng khi Click Một lần đã cài đặt giao diện, phiên bản SP1 của Trình xem Báo cáo đã được cài đặt.

Chúng tôi đã thay đổi SCCM để cài đặt Trình xem báo cáo SP1 và đã kiểm tra phiên bản giao diện cài đặt SCCM mới và có ngày của Vương quốc Anh.

Tại sao phiên bản Trình xem báo cáo ảnh hưởng đến cài đặt văn hóa của PC hoặc cách hoạt động của ToShortDateString(), chúng tôi không có ý tưởng nhưng điều này dường như là vấn đề.

8

ToShortDateString method sử dụng ShortDatePattern property đó là giống hệt nhau của "d" standard date and time format của CurrentCulture của bạn.

en-GB thuộc tính văn hóa ShortDatePattern thuộc tính là dd/MM/yyyy.

Nhưng en-US thuộc tính văn hóa ShortDatePattern thuộc tính là M/d/yyyy.

Đó là lý do tại sao bạn không thể luôn thay thế bằng ToShortDateStringToString("dd/MM/yyyy"). Chúng không phải lúc nào cũng giống nhau. Và "/" Custom Format Specifier có ý nghĩa đặc biệt khi thay thế tôi bằng văn hóa hiện tại hoặc dấu phân cách ngày của văn hóa được chỉ định.

Tôi nghi ngờ cài đặt vùng của bạn đã thay đổi trong quá trình nâng cấp và đó là lý do tại sao phương pháp ToShortDateString tạo ra các kết quả khác nhau.

Nhưng vì bạn đã không cho chúng tôi biết CurrentCulture bạn, chúng tôi không bao giờ biết được vấn đề thực là gì ..

+0

Lần đầu tiên tôi nghĩ rằng cài đặt vùng đã thay đổi, nhưng chúng được đặt thành tiếng Anh (Vương quốc Anh) giống như cách cài đặt của XP. – Tony

+0

Điều kỳ lạ là khi chúng tôi chạy chương trình thử nghiệm trên máy tính, nó báo cáo rằng máy tính là tiếng Anh (Vương quốc Anh) nhưng khi bạn chạy giao diện một vài giây sau đó ghi ngày ra trong định dạng en-US. chúng tôi đã thấy rằng trong Windows 7 có nhiều nơi ODBC được lưu trữ/truy cập là có một cái gì đó tương tự cho các thiết lập khu vực? – Tony

+0

@Tony Vì vậy, thuộc tính 'CurrentCulture' của bạn là' en-GB'? Chạy trong chương trình của bạn và xem. –

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