獲取時間週期型別(12 小時或 24 小時)
檢查當前日期是否包含 AM 或 PM 的符號
Objective-C
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]];
BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);
從 NSDateFormatter
請求時間週期型別
Objective-C
NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
NSRange containsA = [formatStringForHours rangeOfString:@"a"];
BOOL is24h = containsA.location == NSNotFound;
這使用了一個名為 j
的特殊日期模板字串,根據 ICU Spec …
[…]請求區域設定(h,H,K 或 k)的首選小時格式,由補充資料中小時元素的首選屬性確定。 […]請注意,在傳遞給 API 的骨架中使用’j’是讓骨架請求區域設定的首選時間週期型別(12 小時或 24 小時)的唯一方法。
最後一句很重要。它是骨架請求區域設定首選時間週期型別的唯一方法。由於 NSDateFormatter
和 NSCalendar
是建立在 ICU 庫上的,所以這裡也是如此。
參考
第二個選項來自這個答案 。