2009-07-16 8 views
8

Tôi đang sửa đổi ứng dụng web toàn cầu hóa sử dụng CultureInfo được lưu trữ cho mỗi người dùng đã đăng nhập.CultureInfo & DateTimeInfo: Cách kiểm tra xem có phải là 24 giờ không?

Khách hàng muốn nhập dữ liệu thời gian để được bản địa hóa. Hiển thị không phải là vấn đề vì định dạng đã có sẵn. Tuy nhiên tôi cần phải phát hiện nếu cultureinfo hiện tại là trong 24 giờ hoặc am/pm vì vậy tôi có thể hiển thị các hộp nhập chính xác (không chỉ là một textfield).

Ý tưởng ban đầu của tôi là kiểm tra thuộc tính DateTimeInfo của CultureInfo và xem liệu ShortTimePattern có chứa vốn H hay chữ thường thấp hơn nhưng điều này không đủ mạnh đối với tôi.

Có cách nào tốt hơn không? Tôi đã đọc các thuộc tính lớp của cả hai nhưng trừ khi tôi thiếu một cái gì đó, tôi không thể nhìn thấy bất kỳ phương pháp hoặc thuộc tính hiện có nào.

+0

Cảm ơn @mlessard - Kiểm tra ký tự thoát là một ý tưởng hay. Có lẽ tôi sẽ không làm điều đó ở giai đoạn này vì chúng tôi không sử dụng các nền văn hóa tùy chỉnh, đó là tất cả những thứ khá thẳng về phía trước. – toxaq

+0

Đây là mã tôi đã sử dụng để tạo chức năng này làm phương pháp mở rộng: bằng cách sử dụng Hệ thống; sử dụng System.Globalization; namespace My.Extensions { CultureInfoExtensions public class tĩnh { public static bool Is24HourTime (văn hóa CultureInfo này) { culture.DateTimeFormat.ShortTimePattern.Contains trở lại ("H"); } } } – toxaq

Trả lời

7

Tôi không nghĩ có cách nào tốt hơn để có được thông tin đó. Mẫu thời gian cho một nền văn hóa có thể chứa bất cứ điều gì (người dùng thậm chí có thể tạo ra một nền văn hóa tùy chỉnh nơi ShortTimePattern là "\ hello" và sau đó DateTime.ToString() sẽ trả về "hello" cho bất kỳ lúc nào). Trong trường hợp đó, làm cách nào để khung có thể xác định xem CultureInfo có ở định dạng 24 giờ hoặc 12 giờ không?

Vì vậy, "bình thường" DateTimeFormatInfo.ShortTimePattern nhất thiết phải chứa 'h' hoặc 'H', nếu không giờ sẽ không được hiển thị. Tôi nghĩ bạn có thể làm theo ý tưởng ban đầu của bạn và kiểm tra điều đó. Bạn cũng có thể kiểm tra xem 'h' hoặc 'H' không được thoát bằng ví dụ \ like trong "\ hello" của tôi vì nó không đại diện cho giờ :)

5

Cách mạnh mẽ nhất là kiểm tra xem DateTimeFormatInfo.AMDesignator là một chuỗi rỗng.

if (DateTimeFormatInfo.AMDesignator == "") 
    //24hour format 
else 
    //12hour format 
+0

Đó là 'DateTimeFormatInfo.CurrentInfo.AMDesignator' nhưng chính xác những gì tôi cần – Anytoe

2

Kiểm tra 'H'/'h' có vẻ mạnh mẽ hơn việc kiểm tra AM/PM Designator. Một ví dụ điển hình là vi-gb: Chuỗi định dạng thời gian là HH: mm và trình thiết kế AM/PM được đặt thành AM/PM Windows sẽ hiển thị thời gian ở định dạng 24h! Điều này có vẻ là một định nghĩa không nhất quán nhưng kiểm tra 'H' đã sửa lỗi của tôi.