-
什么是UTC時間
- 協(xié)調(diào)世界時(英:Coordinated Universal Time 尾抑,法:Temps Universel Coordonné)事哭,又稱世界統(tǒng)一時間,世界標(biāo)準(zhǔn)時間罩扇,國際協(xié)調(diào)時間担神。英文(CUT)和法文(TUC)的縮寫不同,作為妥協(xié)演痒,簡稱UTC(摘自百度百科) 亲轨。
- 中國大陸、中國香港鸟顺、中國澳門惦蚊、中國臺灣、蒙古國讯嫂、新加坡蹦锋、馬來西亞、菲律賓欧芽、西澳大利亞州的時間與UTC的時差均為+8莉掂,也就是UTC+8(相差八個小時)
- 這套時間系統(tǒng)被應(yīng)用于許多互聯(lián)網(wǎng)和萬維網(wǎng)的標(biāo)準(zhǔn)中,因此在日常開發(fā)中UTC時間的使用較為常見
-
格林尼治標(biāo)準(zhǔn)時(GMT)
- 是指位于倫敦郊區(qū)的皇家格林尼治天文臺的標(biāo)準(zhǔn)時間(開發(fā)中不常用)
-
特別注意:
- iOS中的NSDate對象存放的日期始終是UTC的標(biāo)準(zhǔn)時間(比如下面的例子千扔,服務(wù)器返回的字符串是utc時間憎妙,本地時區(qū)是北京)
- 有結(jié)果可知:時間字符串轉(zhuǎn)成NSDate時库正,沒有指定時間字符串的時區(qū),系統(tǒng)會根據(jù)本地時區(qū)厘唾,將時間字符串轉(zhuǎn)成utc時間存放在NSDate對象中(通過Summary可以看出)褥符,而NSLog打印NSDate時,又會根據(jù)當(dāng)?shù)貢r區(qū)將utc時間轉(zhuǎn)成本地時區(qū)時間打印出來抚垃。
- 結(jié)論:NSDate中存放的時間會自動轉(zhuǎn)換成utc時間喷楣,NSLog打印的時間會自動根據(jù)時區(qū)打印不同的結(jié)果
NSDateFormatter *format = [[NSDateFormatter alloc] init]; format.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSString *timeStr = @"2017-10-25 02:07:39"; //將時間字符串默認(rèn)當(dāng)本地時區(qū)處理,轉(zhuǎn)成NSDate時 -8讯柔,打印時再 +8 NSDate *timeDate = [format dateFromString:timeStr]; // Summary 2017-10-24 18:07:39 UTC NSLog(@"timeDate = %@", timeDate); //timeDate = Wed Oct 25 02:07:39 2017 format.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; //將時間字符串當(dāng)utc處理抡蛙,打印時根據(jù)本地時區(qū)自動打印 +8 NSDate *utcDate = [format dateFromString:timeStr]; // Summary 2017-10-25 02:07:39 UTC NSLog(@"timeDate = %@", utcDate); //timeDate = Wed Oct 25 10:07:39 2017
轉(zhuǎn)換函數(shù)
/**
anyDate 轉(zhuǎn)成 本地時區(qū)的 NSDate
*/
- (NSDate *)getLocalDateFormatAnyDate:(NSDate *)anyDate {
NSTimeZone *sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];//或GMT
NSTimeZone *desTimeZone = [NSTimeZone localTimeZone];
//得到源日期與世界標(biāo)準(zhǔn)時間的偏移量
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:anyDate];
//目標(biāo)日期與本地時區(qū)的偏移量
NSInteger destinationGMTOffset = [desTimeZone secondsFromGMTForDate:anyDate];
//得到時間偏移量的差值
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
//轉(zhuǎn)為現(xiàn)在時間
NSDate* destinationDateNow = [[NSDate alloc] initWithTimeInterval:interval sinceDate:anyDate];
return destinationDateNow;
}
/**
將本地日期字符串轉(zhuǎn)為UTC日期字符串
eg: 2017-10-25 02:07:39 -> 2017-10-24 18:07:39
*/
- (NSString *)getUTCStrFormateLocalStr:(NSString *)localStr {
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *dateFormatted = [format dateFromString:localStr];
format.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
NSString *dateString = [format stringFromDate:dateFormatted];
return dateString;
}
/**
將UTC日期字符串轉(zhuǎn)為本地時間字符串
eg: 2017-10-25 02:07:39 -> 2017-10-25 10:07:39
*/
- (NSString *)getLocalDateFormateUTCDate:(NSString *)utcStr {
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = @"yyyy-MM-dd HH:mm:ss";
format.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
NSDate *utcDate = [format dateFromString:utcStr];
format.timeZone = [NSTimeZone localTimeZone];
NSString *dateString = [format stringFromDate:utcDate];
return dateString;
}
- 演示結(jié)果:
NSDateFormatter *format = [[NSDateFormatter alloc] init]; format.dateFormat = @"yyyy-MM-dd HH:mm:ss"; format.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; NSString *utcStr = @"2017-10-25 02:07:39"; NSDate *utcDate = [format dateFromString:utcStr]; // Summary 2017-10-25 02:07:39 UTC NSDate *localDate = [self getLocalDateFormatAnyDate:utcDate]; // Summary 2017-10-25 10:07:39 UTC NSLog(@" utcDate = %@", [NSString stringWithFormat:@"%@", utcDate]); //utcDate = 2017-10-25 02:07:39 +0000 NSLog(@"localDate = %@", [NSString stringWithFormat:@"%@", localDate]); //localDate = 2017-10-25 10:07:39 +0000 //這樣打印的話,NSLog又會給localDate +8 NSLog(@"localDate = %@", localDate); //localDate = Wed Oct 25 18:07:39 2017