iOS 時區獲取問題


  

時區縮寫 UTC, CST, GMT, CEST 以及轉換

UTC是協調世界時(Universal Time Coordinated)英文縮寫,是由國際無線電咨詢委員會規定和推薦,並由國際時間局(BIH)負責保持的以秒為基礎的時間標度。UTC相當於本初子午線(即經度0度)上的平均太陽時,過去曾用格林威治平均時(GMT)來表示.北京時間比UTC時間早8小時,以1999年1月1日0000UTC為例,UTC時間是零點,北京時間為1999年1月1日早上8點整。

 

GMT(Greenwich Mean Time)是格林尼治平時: 
由於地球軌道並非圓形,其運行速度又隨着地球與太陽的距離改變而出現變化,因此視太陽時欠缺均勻性。視太陽日的長度同時亦受到地球自轉軸相對軌道面的傾斜度所影響。為着要糾正上述的不均勻性,天文學家計算地球非圓形軌跡與極軸傾斜對視太陽時的效應。平太陽時就是指經修訂后的視太陽時。在格林尼治子午線上的平太陽時稱為世界時(UT0),又叫格林尼治平時(GMT)。 為了確保協調世界時與世界時(UT1)相差不會超過0.9秒,有需要時便會在協調世界時內加上正或負閏秒。因此協調世界時與國際原子時(TAI)之間會出現若干整數秒的差別。位於巴黎的國際地球自轉事務中央局(IERS)負責決定何時加入閏秒。

也就是說,UTC 基本上等於GMT

 

CET

(英語:Central European Time,CET)歐洲中部時間是比世界標准時間(UTC)早一個小時的時區名稱之一。它被大部分歐洲國家和部分北非國家采用。冬季時間為UTC+1,夏季歐洲夏令時為UTC+2

 

CEST

歐洲中部夏令時間(Central European Summer Time,簡稱CEST)比世界標准時間(UTC)早兩個小時的時區名稱之一。它被大部分歐洲國家和部分北非國家在夏天采用(UTC+2),冬季這些國家使用歐洲中部時間(UTC+1)

時區在線轉換工具網站  http://www.timebie.com/timezone/centraleuropeansummerbeijing.php 

 

 

CST

CST卻同時可以代表如下 4 個不同的時區: 

Central Standard Time (USA) UTC-6:00 

Central Standard Time (Australia) UTC+9:30 
China Standard Time UTC+8:00 
Cuba Standard Time UTC-4:00 
可見,CST可以同時表示美國,澳大利亞,中國,古巴四個國家的標准時間。 也就是說,這個需要根據使用的場景來確定使用的是哪個時區。

////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////

1. 標准的獲取時區的正確方法

  [NSTimeZone resetSystemTimeZone]; // 重置手機系統的時區

    NSInteger offset = [NSTimeZone localTimeZone].secondsFromGMT;

    offset = offset/3600;

    NSString *tzStr = [NSString stringWithFormat:@"%ld", (long)offset];

 獲取的時區:(Asia/Shanghai (GMT+8) offset 28800)

2.  截取 GMT 方法

    //獲取當地的時區

    NSString *tzStr;

    NSTimeZone *localTimeZone = [NSTimeZone localTimeZone];

    NSArray *zoneArray = [[NSString stringWithFormat:@"%@", localTimeZone] componentsSeparatedByString:@"GMT"];

    NSString *tempTZ = [NSString stringWithFormat:@"%@", zoneArray.lastObject];

    // eg: +8 去掉"+", -8 傳入全部, +0 / -0

    // - 1 ~ 12, + 1 ~ +12, 0

    if([tempTZ hasPrefix:@"+"]) {

        tzStr = [NSString stringWithFormat:@"%c", [tempTZ characterAtIndex:1]];

    }else  if([tempTZ hasPrefix:@"-"]){

        tzStr = [NSString stringWithFormat:@"%@", [tempTZ substringToIndex:2]];

    }else if([tempTZ hasPrefix:@"0"]) {

        tzStr = [NSString stringWithFormat:@"%@", [tempTZ substringToIndex:1]];

    }

獲取的時區: Europe/Berlin (CEST) offset 7200 (Daylight)

鑒於有些時區非攜帶 GMT 格式嗎故 "方法二 " 不可行, 采用 "方法一".

根據距離 0 時區偏差的秒數算出時區. 


免責聲明!

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



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