2010-08-17 25 views
9

Tôi đã gặp phải vấn đề khiến tôi phát điên. Trong ứng dụng của tôi (ASP.NET MVC2 /.NET4), tôi chỉ đơn giản là chạy này:.NET DateTime không trả về AM/PM trong ToShortTimeString()

DateTime.Now.ToShortTimeString() 

Tất cả các ví dụ tôi đã nhìn thấy cho thấy tôi sẽ nhận được một cái gì đó như: 12:32 PM, tuy nhiên tôi nhận được 12:32 mà không có sự AM /PM.

Tôi đã khởi chạy LinqPad 4 để xem liệu tôi có thể nhân rộng điều này hay không. Thay vào đó, nó trả về chính xác 12:32 PM.

Cái quái gì?

+2

Chỉ cần đoán, nhưng đây có phải là vấn đề địa phương hóa không? Quá trình của bạn không chạy trong một nền văn hóa trung tính? – kbrimington

Trả lời

10

Bạn cũng có thể thử một custom format để tránh nhầm lẫn cụ thể văn hóa:

DateTime.Now.ToString("hh:mm tt") 
1

Vâng, điều này phụ thuộc vào Locale của bạn. Giá trị của System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortTimePattern trong đơn đăng ký của bạn là bao nhiêu?

Xem MSDN Link

4

KBrimington vẻ là đúng:

Chuỗi trả về bởi phương pháp ToShortTimeString là văn hóa nhạy cảm. Nó phản ánh mẫu được định nghĩa bởi đối tượng DateTimeFormatInfo của nền văn hóa hiện tại. Ví dụ, đối với văn hóa en-US, mẫu thời gian ngắn chuẩn là "h: mm tt"; cho văn hóa de-DE, nó là "HH: mm"; đối với văn hóa ja-JP, nó là "H: mm". Chuỗi định dạng cụ thể trên một máy tính cụ thể cũng có thể được tùy chỉnh để nó khác với chuỗi định dạng thời gian ngắn chuẩn.

Từ MSDN

1

Bạn có thể đặt thông tin văn hóa của chủ đề và sau đó điều này sẽ được sử dụng theo phương pháp ToShortTimeString(). Nhưng hiểu rằng điều này sẽ ảnh hưởng đến tất cả các mã đang chạy trong chuỗi đó.

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us"); 
2

Nếu bạn không muốn gây rối với văn hóa cho chủ đề toàn/ứng dụng của bạn, hãy thử này:

CultureInfo ci = new CultureInfo("en-US"); 
string formatedDate = DateTime.Now.ToString("t", ci); 

Bạn có thể tìm danh sách các DateTime Format chuỗi here.

1

Hàm sử dụng mẫu mặc định của người dùng. Chúng có thể được thay đổi trong bảng điều khiển. Kiểm tra tab đầu tiên trong Cài đặt 'Khu vực và Ngôn ngữ'. Thay đổi mẫu Thời gian ngắn thành mẫu giống như 'h: mm tt' và bạn đã hoàn tất.

0

Điều này cũng có thể cần CultureInfo.InvariantCulture ví dụ: DateTime.Now.ToString("hh:mm:ss tt", CultureInfo.InvariantCulture)

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