2009-12-28 49 views
8

Làm thế nào bạn có thể phát hiện xem iPhone có hiển thị thời gian ở chế độ 12 giờ hoặc 24 giờ không?Phát hiện xem iPhone có hiển thị thời gian ở chế độ 12 giờ hoặc 24 giờ không?

Tôi hiện đang theo dõi khu vực hiện tại để biết các thay đổi, tuy nhiên đó không phải là cài đặt duy nhất ảnh hưởng đến thời gian hiển thị. Chuyển đổi 24 giờ trong ngày & cài đặt thời gian sẽ ghi đè cài đặt khu vực hiện tại.

Có cách nào để phát hiện cài đặt 12/14 giờ này không?

Trả lời

13

Tôi đã tìm ra cách khá để xác định điều này với một chức năng nhỏ mà tôi đã thêm vào danh mục NSLocale. Nó có vẻ khá chính xác và không tìm thấy bất kỳ vấn đề với nó trong khi thử nghiệm với một số khu vực.

@implementation NSLocale (Misc) 
- (BOOL)timeIs24HourFormat { 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateStyle:NSDateFormatterNoStyle]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *dateString = [formatter stringFromDate:[NSDate date]]; 
    NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; 
    NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; 
    BOOL is24Hour = amRange.location == NSNotFound && pmRange.location == NSNotFound; 
    [formatter release]; 
    return is24Hour; 
} 
@end 
1

Bạn đang sử dụng lớp học NSDateFormatter? Theo tôi biết, điều đó tôn trọng bất kỳ cài đặt định dạng thời gian theo vùng nào mà người dùng có.

chỉnh sửa - lại: nhận xét của bạn:

So sánh chuỗi định dạng có thể là phương pháp phù hợp. Nội dung nào đó dọc theo dòng:

NSDateComponents *midnightComp = [[NSDateComponents alloc] init]; 
[midnightComp setHour:0] 
[midnightComp setMinute:0]; 
NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
[format setDateStyle:NSDateFormatterNoStyle]; 
[format setTimeStyle:NSDateFormatterShortStyle]; 
BOOL midnightIsZeros = [[[format stringFromDate:[[NSCalendar currentCalendar] dateFromComponents:midnightComp]] substringToIndex:2] isEqualToString:@"00"]; 

[[NSUserDefaults standardUserDefaults] setBool:midnightIsZeros forKey:@"TimeWas24Hour"]; 

Chạy ứng dụng đó khi ứng dụng thoát và kiểm tra lại giá trị được lưu trữ mặc định.

+1

Tôi về cơ bản cần phát hiện xem cài đặt đó có thay đổi kể từ lần tải cuối cùng hay không. Tôi có thể phát hiện định danh miền địa phương, nhưng không có cài đặt nào cho cài đặt 24 giờ. Điều duy nhất tôi có thể nghĩ là so sánh chuỗi ngày được định dạng đã lưu, nhưng có vấn đề với múi giờ và tiết kiệm ánh sáng ban ngày có thể gây ra các vấn đề với so sánh trực tiếp. –

+0

Cảm ơn bạn đã bổ sung, tuy nhiên tôi đã nhận thấy rằng một số khu vực thực sự hiển thị giờ với 0 trong chế độ 24 giờ. –

+0

Trong trường hợp đó, hãy lấy hai ký tự đầu tiên như trên và kiểm tra xem chúng có phải là "00" hoặc "0:" hay không. –

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