我想在运行时更新我的 iOS 应用程序的时区。我想在用户从“设置”应用程序“设置->常规->语言和区域->区域”更改区域时更新时区。
我正在使用 NSCurrentLocaleDidChangeNotification 接收区域更改通知,并且正在调用选择器方法“updateTimeZone”。
[[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(updateTimeZone) name:NSCurrentLocaleDidChangeNotification object:nil];
- (void)updateTimeZone
{
NSLog(@"Zone1: %@", [NSTimeZone systemTimeZone]);
NSLog(@"Zone2: %@", [NSTimeZone localTimeZone]);
NSLog(@"Zone3: %@", [NSTimeZone defaultTimeZone]);
[NSTimeZone resetSystemTimeZone];
NSLog(@"Zone11: %@", [NSTimeZone systemTimeZone]);
NSLog(@"Zone22: %@", [NSTimeZone localTimeZone]);
NSLog(@"Zone33: %@", [NSTimeZone defaultTimeZone]);
}
输出
2015-01-07 16:23:02.992 A[1677:105206] Zone1: Asia/Kolkata (GMT+5:30) offset 19800
2015-01-07 16:23:02.993 A[1677:105206] Zone2: Local Time Zone (Asia/Kolkata (GMT+5:30) offset 19800)
2015-01-07 16:23:02.994 A[1677:105206] Zone3: Asia/Kolkata (GMT+5:30) offset 19800
2015-01-07 16:23:02.999 A[1677:105206] Zone11: Asia/Kolkata (GMT+5:30) offset 19800
2015-01-07 16:23:02.999 A[1677:105206] Zone22: Local Time Zone (Asia/Kolkata (GMT+5:30) offset 19800)
2015-01-07 16:23:03.001 A[1677:105206] Zone33: Asia/Kolkata (GMT+5:30) offset 19800
我尝试从“设置”中更改许多区域,但我的应用程序始终显示我当前的时区。我已经在使用 [NSTimeZone resetSystemTimeZone];删除缓存的时区,但仍然始终获取我当前的时区。如何获取 iOS 区域(系统时区)中设置的时区?
当我们更新区域时,它会更新设备的区域设置(AM/PM 或 24 小时格式)。我们可以使用 [NSLocale autoupdatingCurrentLocale] 在应用程序中获取此更新的区域设置,但我们需要从导航 Controller 中弹出 View Controller ,并再次推送它以获取新的区域设置。我想更新这个新的时间格式而不从导航 Controller 弹出 View Controller ?
最佳答案
如果区域设置发生变化,并且您想要更新 UI 以反射(reflect)当前区域设置(例如 AM/PM 与 24 小时时间格式),您只需监听区域设置更改,然后询问您的 NSDateFormatter
获取您正在使用的任何字符串的新值。首先,观察NSCurrentLocaleDidChangeNotification
。当您收到该通知时,请向您的 NSDateFormatter
询问新的字符串值,并通过再次调用 stringForDate:
在您的 UI 中使用这些字符串。
如果日期/时间字符串位于 TableView 中,这可能意味着重新加载 TableView 。如果它们位于其他 UI 元素中,则取决于您最初如何配置该元素。日期格式化程序将自动给出当前值 - 无需使用 autoupdatingCurrentLocale
。
这些都与时区无关。通常,如果手机移动到新时区,iPhone 时区会自动更新。但发生这种情况时,用户首选项(例如日期格式)不会改变。这些首选项与用户的区域设置相关,并且无论时区如何都保持不变。
关于ios - 在运行时更新 iOS 应用程序时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27817964/