2014-11-26 1 views
0

Я хочу определить изменение формата времени, сделанное в настройках системы. Я использовал следующий код, но он всегда дает мне время старого формата. Как я могу получить новый формат времени?Как определить изменение формата системного времени в ios?

#pragma mark 
#pragma mark - application change time format 
-(void)applicationSignificantTimeChange:(UIApplication *)application 
{ 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setLocale:[NSLocale currentLocale]]; 
    [formatter setDateStyle:NSDateFormatterNoStyle]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 
    [formatter setTimeZone:[NSTimeZone localTimeZone]]; 
    NSString *dateString = [formatter stringFromDate:[NSDate date]]; 
    NSLog(@"dataString ::%@",dateString); 
    NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; 
    NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; 
    is12Hour = (amRange.length > 0 || pmRange.length > 0); 
} 

ответ

4

Я не уверен, почему вы ожидаете изменения датыФормата, если дата значительно изменится.
Значительное событие изменения времени запускается, когда изменяется время (то есть [NSDate date]). Например, если начинается новый день, если пользователь изменяет часовой пояс или начинается или заканчивается переход на летнее время.
Но эти события не меняют формат даты.

Я думаю, что вы хотите отслеживать изменения локали. Для этого есть уведомление: NSCurrentLocaleDidChangeNotification.

Что-то, как это должно работать:

j шаблон, который будет заменен h a (12 часовым формат) или H (24-часового форматом) с помощью метода шаблона даты

id localeDidChangeNotification = [[NSNotificationCenter defaultCenter] addObserverForName:NSCurrentLocaleDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { 
    NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]]; 
    if ([dateFormat rangeOfString:@"h"].location != NSNotFound) { 
     // 12 hour 
    } 
    else { 
     // 24 hour 
    } 
}]; 

// Don't forget to remove the notification in the appropriate place 
// [[NSNotificationCenter defaultCenter] removeObserver:localeDidChangeNotification]; 
+0

первое спасибо за ответ, в моем приложении мое мнение меняется в соответствии с изменением формы времени, поэтому я хочу определить изменение формата системного времени. –

+0

Большое вам спасибо за этот ответ, он отлично работает. Я хочу проголосовать за это, но у меня не хватило места. Так что спасибо большое. –

-1

Сохранение формата времени системы. хранить его в NSUserDefaults, говорит PtimeFormat В следующий раз при запуске приложения проверьте, существует ли PtimeFormat. получить еще раз формат времени системы и сопоставить оба формата, независимо от того, являются они одинаковыми или нет.

+0

но всегда дать старому формированию времени не новое. Поэтому, когда я снова запускаю приложение, он дает мне то же самое время, которое мы сохраняем в NSUserDefaults.Thanks для вашего ответа –

+0

нормально, я не попробовал. сделайте одно, после изменения формата времени перезапустите свое устройство, а затем запустите приложение, оно делает какие-либо изменения? –

+0

Да, в моем приложении мое представление меняется в соответствии с изменением времени, так что это невозможно. –

Смежные вопросы