2011-12-15 45 views
5

Tôi đã có một drawRect làm cho một dòng thời gian một chút giống như iCal. Tôi sử dụng vòng lặp for để viết thời gian dọc theo chế độ xem cuộn. Tôi đã tự hỏi nếu A) có cách xác định xem người dùng đã chọn đồng hồ 12 hoặc 24 giờ trong cài đặt hệ thống và B) nếu có cách hiệu quả hơn để thay đổi nhãn thời gian, sau đó gọi truy vấn 'if' mỗi lần vượt qua của vòng lặp 'for'. CheersTìm xem người dùng có thích 12/24 giờ không?

+0

Bạn cần phải cẩn thận. Nếu người dùng đã đặt chế độ 12/24 giờ trong Cài đặt trái với ngôn ngữ, thì NSDateFormatter (và có thể một số người khác) bỏ qua sự hiện diện/vắng mặt của bất kỳ bộ định danh 'a' nào và cung cấp (hoặc không) giá trị AM/PM dựa trên Cài đặt chế độ 12/24 giờ. Đó là tất cả khá screwy. –

Trả lời

1
NSDate *today = [NSDate date]; 
NSString *formattedString = [NSDateFormatter localizedStringFromDate:today dateStyle: kCFDateFormatterNoStyle timeStyle: kCFDateFormatterShortStyle]; 

NSRange foundRange; 
foundRange = [formattedString rangeOfString:"am" options:NSCaseInsensitiveSearch]; 
if(foundRange.location == NSNotFound) { 
    foundRange = [formattedString rangeOfString:"pm" options:NSCaseInsensitiveSearch]; 
} 

BOOL isAMPMSettingOn = (foundRange.location != NSNotFound); 
5
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateStyle:NSDateFormatterNoStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterLongStyle]; 

if([[dateFormatter dateFormat] rangeOfString:@"a"].location != NSNotFound) { 
    // user prefers 12 hour clock 
} else { 
    // user prefers 24 hour clock 
} 
+2

Đây thực sự là câu trả lời hay nhất, vì nhiều quốc gia chỉ định AM và PM là a.m. và p.m .. – MiguelB

+1

@Leuguimerius nhưng một số ngôn ngữ như tiếng Trung sử dụng các ký tự hoàn toàn khác nhau cho AM và PM. Xem câu trả lời của tôi http://stackoverflow.com/a/23621308/72176 để biết cách xử lý. –

+0

@WilliamDenniss Brilliant! Giải quyết mọi thứ. Tôi đã không có ý tưởng như vậy định dạng tồn tại. – MiguelB

6

Những câu trả lời trước đó cho rằng "AM" và "PM" biểu tượng được thể hiện bằng ký tự La Mã. Mã này được điều chỉnh từ keyur bhalodiya thực hiện công việc tốt hơn khi xử lý các ngôn ngữ như tiếng Trung, bằng cách sử dụng các phương pháp AMSymbolPMSymbol của NSDateFormatter.

-(BOOL)uses24hourTime 
{ 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setLocale:[NSLocale currentLocale]]; 
    [formatter setDateStyle:NSDateFormatterNoStyle]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 

    NSString *dateString = [formatter stringFromDate:[NSDate date]]; 
    NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; 
    NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; 

    return (amRange.location == NSNotFound && pmRange.location == NSNotFound); 
} 
Các vấn đề liên quan