iOS 時區設置


  最近在考慮獲取當前時間的問題,因為我們的APP不一定只在天朝境內使用,現在很多人出國游玩,當他們查看APP的時候,如果你的應用有涉及到獲取當前時間,那么你要注意了!

  貌似從iOS8開始(因為手頭沒有iOS6,7設備),系統獲取時間是以時區為准,而不是地區,那么在你手機設置里,通用-->日期與時間 你會看到如圖界面.

  這里系統默認是自動設置, 應該就是系統獲取了你當前的坐標,判斷你的坐標是在中國境內,所以時區自動設置為北京.

  然而當你去了英國倫敦游玩呢?系統會獲取你的坐標,定位為倫敦,那么你的時間就會設置為英國倫敦. 

  當然,你獲取到了當地的正確時間.但是當你打開APP時,如果你沒有設定時區,那么也將獲取倫敦時間.也沒有問題.但是如果你獲取的時間要傳輸回國內,或者和數據庫進行比對,你要是存得是字符串(yyyy-MM-dd HH:mm:ss),那就糟糕了... 

  遇到這種情況,最簡單的辦法就是設置時區,當你的數據需要用時間進行比對,你最好把時區定准在某一時區,通常是定位在天朝(東8區).

  網上有一種更改 NSLocale 設置 Identifier 為@"zh-CN"的,然后把formatter.locale = locale的,親測不好使. 你試之前先把自動獲取時區改為手動,輸入一個別的地區,比如倫敦.上代碼:

1     NSLocale * locale = [NSLocale localeWithLocaleIdentifier:@"zh-CN"];
2     NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
3     formatter.locale = locale;
4     formatter.dateFormat = @"yyyy-MM-dd hh:mm:ss";
5     NSDate * date5 = [NSDate date];
6     NSString * nowTime = [formatter stringFromDate:date5];
7     NSLog(@"nowTime=%@",nowTime);

  你得到的時間肯定不是北京時間,為何? "zh-CN" 是簡體中文.所以這種設置,具體有什么用處我沒看出來,但是對於時間是沒有影響的.

  那么如何正確設置天朝時區? NSTimeZone,多說無益,上代碼:

    NSDate * date = [NSDate date];
    NSDateFormatter * df = [[NSDateFormatter alloc]init];
    [df setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
//    設置東8區
    [df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8*3600]];
    NSString* now = [df stringFromDate:date];
//    正確獲取天朝時間
    NSLog(@"now=%@",now);

  NSTimeZone 還有 [NSTimeZone systemTimeZone] , [NSTimeZone defaultTimeZone] 獲取時區的方法,這兩種方法都是獲取的系統時區.

  大多數人的時區都是自動獲取的,所以,當你的APP獲取系統時間的時候,如果是需要當地時間,那么不用管.如果要和北京時間進行比對,那么請設置時區,以免給出國的用戶造成不必要的麻煩.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM