最近在考慮獲取當前時間的問題,因為我們的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獲取系統時間的時候,如果是需要當地時間,那么不用管.如果要和北京時間進行比對,那么請設置時區,以免給出國的用戶造成不必要的麻煩.