iOS-NSDate

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); //date:2019-11-19 06:51:02 +0000

//lldb date:
Printing description of date:
2019-11-19 06:51:02 +0000

此时需要注意,获得这个时间是 0 时区时间,如果你手机是北京时间,则会打印出来时间为 [NSDate date]的数值 -8 (少8)

lldbNSlog 打印出来的基于 0 时区时间

2. NSDateFormatter 默认初始化变量(获取当前时间当前时区NSString)

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];

//lldb
Printing description of localDateString:
2019-11-19 01:51:02

NSDateFormatter 不设置 timezone,默认初始化时候,传入当前时间 date ,则会根据手机当前的时区转出来 字符串 日期

3.NSDateFormatter 设置时区(获取当前时间其他时区NSString)

如果想将当前时间 [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];

//lldb (由于写文章时间时间,时间稍后了一点)
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];

//lldb: 同理,lldb 打印出来的时间是当前date 基于 0 ,当前模拟服务器返回时间是北京时间 2019-11-19 15:13:20
Printing description of date:
2019-11-19 07:13:20 +0000
Printing description of localDateString:
2019-11-19 15:13:20


//这个date 就是东八区的UTC 时间了
//然后将这个date转化成当地时间,可以重用 format
format.timeZone = [NSTimeZone localTimeZone];
localDateString = [format stringFromDate:date];

//lldb: 除了date还是北京时间的date,localDateString已经转变成当前手机时区的string了
Printing description of date:
2019-11-19 07:13:20 +0000
Printing description of localDateString:
2019-11-19 02:13:20

Author

Sylar

Posted on

2019-11-19

Updated on

2020-09-21

Licensed under

Comments