NSDate获取当地时间

时间:2016-01-03 09:05:18

标签: ios objective-c iphone nsdate nsdateformatter

我构建了从数据库中获取日期字符串(法国时间的日期)的应用程序。在我得到字符串后我将其转换为nsdate:

NSString *dateStr = "20/3/2016 21:00 +0000";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm zzz"];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
self.date = [dateFormatter dateFromString:dateStr];

进入self.date我得到(如果我打印对象):

2016-06-10 21:00:00 +0000

但是当我尝试将其转换为当地时间时:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm"];
NSString *time = [formatter stringFromDate:cellItem.date];

我得到的是另一个时间:00:00

知道可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

NSDateFormatter的默认时区是设备的时区,因为您未在第二个格式化程序中明确设置,所以将使用该区域。

对两个作业使用第一个格式化程序,或者像在第一个格式化程序中那样明确设置它:

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];

还附注:

  

进入self.date我得到(如果我打印对象)

如果您使用NSLog()或调试器查看NSDate对象,它将使用[NSDate description]生成字符串,该字符串将始终使用GMT时区。这不断地让人们吵闹。