app里因?yàn)闀r區(qū)問題,所以需要進(jìn)行時間轉(zhuǎn)換,下面是我們常用的時間轉(zhuǎn)換的方法
遇到的問題:將北京時間2015-12-28轉(zhuǎn)換成當(dāng)?shù)貢r間,使用的系統(tǒng)時區(qū)為東八區(qū),講道理應(yīng)該轉(zhuǎn)成的時間是一致的,但是得到的結(jié)果卻很讓我意外,是2016-12-28,時間居然差了一年.廢話不多說,直接上代碼
//TimerTansform
@interfaceTimerTansform :NSObject
+ (NSString*)convertBeijingTimeToLocalTime :(NSString*)beijingTimeString;
@end
@implementationTimerTansform
+ (NSString*)convertBeijingTimeToLocalTime :(NSString*)beijingTimeString {
return[selfconvertBeijingTimeToLocalTime:beijingTimeStringdateFormatterString:@"YYYY-MM-dd HH:mm:ss"];
}
+ (NSString*)convertBeijingTimeToLocalTime:(NSString*)beijingTimeString dateFormatterString:(NSString*)dateFormatterString{
NSTimeZone*beijingTimeZone = [NSTimeZonetimeZoneWithName:@"Asia/Beijing"];
NSDateFormatter*formatter = [[NSDateFormatteralloc]init];
[formattersetDateFormat:dateFormatterString];
formatter.timeZone= beijingTimeZone;
NSDate*serverTime = [formatterdateFromString:beijingTimeString];
NSTimeZone*localTimeZone = [NSTimeZonesystemTimeZone];
formatter.timeZone= localTimeZone;
NSString*localTimeString = [formatterstringFromDate:serverTime];
NSLog(@"server: %@local: %@", beijingTimeString, localTimeString);
returnlocalTimeString;
}
@end
//調(diào)用方法
-(void)transform{
NSString*str = [NSStringstringWithFormat:@"2015-12-28 00:00:00"];
str = [TimerTansformconvertBeijingTimeToLocalTime:str];
}
輸出的日志為:server: 2015-12-28 00:00:00local: 2016-12-28 00:00:00
但是如果把 YYYY-MM-dd HH:mm:ss 改成 yyyy-MM-dd HH:mm:ss
輸出的日志為:server: 2015-12-28 00:00:00local: 2015-12-28 00:00:00
結(jié)論
大家在格式化時間的時候需要注意一個地方:
yyyy-MM-dd HH:mm:ss 與 YYYY-MM-dd HH:mm:ss 轉(zhuǎn)化出來的時間可能會出現(xiàn)不一樣(在年底與年初的那幾天)慎式,后者轉(zhuǎn)出來的時間可能會比真實(shí)的時間多一年或者少一年僵控。yyyy是真實(shí)的年传惠,YYYY表示的是周所在的年
詳情可以參考:https://segmentfault.com/q/1010000000174542 (有興趣的可以試一下:)