時區縮寫 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 時區偏差的秒數算出時區.