检测时间格式是否为12小时或24小时格式

Jon*_*asG 39 cocoa-touch objective-c nstimezone ios

有没有办法检测应用程序的当前设备是否使用12h我们的24h格式,以便我可以使用一个NSDateFormatter 12h和一个24h取决于用户语言/ loaction设置?就像UIDatePicker检测并显示AM/PM选择器(如果它是12h格式).

Jon*_*asG 81

我想通了,很简单.我刚刚将此代码添加到viewDidLoad:

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);
[formatter release];
NSLog(@"%@\n",(is24h ? @"YES" : @"NO"));
Run Code Online (Sandbox Code Playgroud)

它完全返回YESNO取决于区域设置.

  • 这仅适用于本地日历使用与手机相同的格式,但在iOS上,您可以专门设置时间格式,使其与本地日历中使用的格式不同. (3认同)

Mos*_*erg 11

这是一个Swift 3.0更新版本

func using12hClockFormat() -> Bool {

    let formatter = DateFormatter()
    formatter.locale = Locale.current
    formatter.dateStyle = .none
    formatter.timeStyle = .short

    let dateString = formatter.string(from: Date())
    let amRange = dateString.range(of: formatter.amSymbol)
    let pmRange = dateString.range(of: formatter.pmSymbol)

    return !(pmRange == nil && amRange == nil)
}
Run Code Online (Sandbox Code Playgroud)


beo*_*ulf 8

这是对我有用的快速解决方案,上面的两个没有。

let dateString: String = DateFormatter.dateFormat(
    fromTemplate: "j", options: 0,
    locale: Locale.current
)!
if(dateString.contains("a")){
// 12 h format
   return true
}else{
// 24 h format
   return false
}
Run Code Online (Sandbox Code Playgroud)