Есть ли способ определить, использует ли текущее устройство приложение 12h наш 24-часовой формат, чтобы я мог использовать один NSDateFormatter в течение 12 часов и один на 24 часа в зависимости от настройки языка /loaction пользователей? Так же, как UIDatePicker обнаруживает и показывает сборщик AM/PM, если он имеет формат 12h.
Обнаруживать, если формат времени находится в 12-часовом или 24-часовом формате
Ответ 1
Я понял, это довольно легко. Я просто добавил этот код к 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"));
И он отлично возвращает YES
или NO
в зависимости от языкового стандарта.
Ответ 2
И вот обновленная версия 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)
}
Ответ 3
это быстрое решение, которое сработало для меня, эти два выше не сделали.
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
}
Ответ 4
Вот версия Swift:
func using12hClockFormat() -> Bool {
let formatter = NSDateFormatter()
formatter.locale = NSLocale.currentLocale()
formatter.dateStyle = NSDateFormatterStyle.NoStyle
formatter.timeStyle = NSDateFormatterStyle.ShortStyle
let dateString = formatter.stringFromDate(NSDate())
let amRange = dateString.rangeOfString(formatter.AMSymbol)
let pmRange = dateString.rangeOfString(formatter.PMSymbol)
return !(pmRange == nil && amRange == nil)
}