Определить, если формат времени в 12-часовом или 24-часовом формате - PullRequest
36 голосов
/ 16 сентября 2011

Есть ли способ определить, использует ли текущее устройство приложения 12h в нашем 24-часовом формате, чтобы я мог использовать один NSDateFormatter в течение 12 часов и один в течение 24 часов, в зависимости от настроек языка / языка пользователя? Так же, как UIDatePicker обнаруживает и показывает AM / PM, если это формат 12 ч.

Ответы [ 5 ]

80 голосов
/ 24 сентября 2011

Я понял, это довольно легко.Я только что добавил этот код в 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 в зависимости от локали.

11 голосов
/ 03 октября 2016

А вот и обновленная версия 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 голосов
/ 24 января 2017

это быстрое решение, которое сработало для меня, те два выше не сработали.

let dateString : String = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current)!</p>

<code>   if(dateString.contains("a")){
   // 12 h format
       return true
   }else{
   // 24 h format
       return false
   }
</code>

2 голосов
/ 27 сентября 2016

Вот версия 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)
}
1 голос
/ 10 января 2018

Объектив C категории NSDate+Extensions:

@import Foundation;

@interface NSDate (Extensions)

- (NSString *)getTimeString;

@end


#import "NSDate+Extensions.h"

@implementation NSDate (Extensions)

- (NSString *)getTimeString
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    if ([self isTwelveHourDateFormat]) {
        [formatter setDateFormat:@"hh:mm\ndd MMM"];
    }
    else {
        [formatter setDateFormat:@"HH:mm\ndd MMM"];
    }
    return [formatter stringFromDate:self];
}

- (BOOL)isTwelveHourDateFormat
{
    NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
    return [dateFormat containsString:@"a"];
}

@end
...