2015-01-07 73 views
1

我想在運行時更新iOS應用程序的時區。我想在用戶從「設置」應用程序「設置 - >常規 - >語言&區域 - >區域」更改區域時更新時區。在運行時更新iOS應用程序時區

我正在接收區域更改通知使用和NSCurrentLocaleDidChangeNotification和選擇器方法「updateTimeZone」被調用。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@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區域(systemtimezone)中設置的時區?

當我們更新區域時,它會更新設備的區域設置(AM/PM或24HOUR格式)。我們可以使用[NSLocale autoupdatingCurrentLocale]在應用程序中獲取此更新的區域設置,但是我們需要從導航控制器中彈出視圖控制器,然後再次將其推送到新的區域設置。我想更新這個新的時間格式,而無需從導航控制器中彈出視圖控制器?

+1

你究竟在iOS設置中做了這些改變? –

+0

我想將AM/PM格式更新爲24小時(軍用)格式,反之亦然。 –

+1

但AM/PM與24小時格式不是時區的一部分。 –

回答

4

如果語言環境發生變化,並且想要更新UI以反映當前語言環境(例如AM/PM和24小時時間格式),則只需監聽語言環境更改,然後向您的NSDateFormatter詢問新值你正在使用的任何字符串。首先,觀察NSCurrentLocaleDidChangeNotification。當您收到該通知時,請詢問NSDateFormatter新的字符串值,並通過再次呼叫stringForDate:在您的用戶界面中使用這些字符串。

如果日期/時間字符串在表格視圖中,這可能意味着重新加載表格視圖。如果它們位於其他UI元素中,則取決於您如何配置該元素。日期格式化程序會自動給出當前值 - 不需要混淆autoupdatingCurrentLocale

這和這個時區沒有任何關係。通常,如果手機移動到新的時區,iPhone時區會自動更新。但是,如果發生這種情況,用戶首選項(如日期格式)不會更改。這些首選項與用戶的區域設置綁定在一起,並保持不變,而與時區無關。

+0

這是區分語言環境和時區的好方法。時區由政治和地理定義。區域設置由文化和特定用戶定義。 – Tommy

+0

謝謝@Tom Harrinton。很好地解釋了+1並被接受。 –

相關問題