我想检测系统设置中完成的时间格式更改。我使用下面的代码,但它总是给我时间旧的格式。我怎样才能获得新的时间格式?
#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);
}
答案 0 :(得分:5)
我不确定为什么如果日期发生重大变化,您期望dateFormat会发生变化
当时间(即[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];
答案 1 :(得分:-1)
存储系统的时间格式。将它存储在NSUserDefaults中说PtimeFormat 下次启动应用程序时检查PtimeFormat是否存在。再次获得系统的时间格式并匹配两种格式,无论它们是否相同。