iOS 中日期时区的转换笔记
当前手机测试环境: 当前时间是北京时间 2019-11-19 14:51 , 手机时区设置为 纽约 时区
北京时区 GMT +8
纽约时区 GMT -5
所以北京时间与纽约时间相差 13 个小时!
所以手机状态栏显示时间此时应该为 01:51 分!
1.获得当前手机当前时区的时间(NSDate)
1 2 3 4 5 6
| NSDate *date =[NSDate date]; NSLog(@"date:%@",date);
Printing description of date: 2019-11-19 06:51:02 +0000
|
此时需要注意,获得这个时间是 0 时区时间,如果你手机是北京时间,则会打印出来时间为 [NSDate date]
的数值 -8 (少8)
lldb
与 NSlog
打印出来的基于 0 时区时间
1 2 3 4 5 6 7
| NSDateFormatter *format = [[NSDateFormatter alloc] init]; format.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSString *localDateString = [format stringFromDate:date];
Printing description of localDateString: 2019-11-19 01:51:02
|
NSDateFormatter
不设置 timezone
,默认初始化时候,传入当前时间 date
,则会根据手机当前的时区转出来 字符串 日期
如果想将当前时间 [NSDate date]
转为东八区北京时间,需要这样做:
1 2 3 4 5 6 7 8
| NSDateFormatter *format = [[NSDateFormatter alloc] init]; format.dateFormat = @"yyyy-MM-dd HH:mm:ss"; format.timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"]; NSString *localDateString = [format stringFromDate:date];
Printing description of localDateString: 2019-11-19 15:02:21
|
4. 服务器返回的时间转化为当前时区时间(NSDate)
同理,如果服务器时间,是以北京时间返回给客户端,则需要指定东八区时区format
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| NSDateFormatter *format = [[NSDateFormatter alloc] init]; format.dateFormat = @"yyyy-MM-dd HH:mm:ss"; format.timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"]; NSDate *date = [format dateFromString:@"2019-11-19 15:13:20"]; NSString *localDateString = [format stringFromDate:date];
Printing description of date: 2019-11-19 07:13:20 +0000 Printing description of localDateString: 2019-11-19 15:13:20
format.timeZone = [NSTimeZone localTimeZone]; localDateString = [format stringFromDate:date];
Printing description of date: 2019-11-19 07:13:20 +0000 Printing description of localDateString: 2019-11-19 02:13:20
|