我构建了从数据库中获取日期字符串(法国时间的日期)的应用程序。在我得到字符串后我将其转换为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
知道可能出现什么问题?
答案 0 :(得分:1)
NSDateFormatter
的默认时区是设备的时区,因为您未在第二个格式化程序中明确设置,所以将使用该区域。
对两个作业使用第一个格式化程序,或者像在第一个格式化程序中那样明确设置它:
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
还附注:
进入
self.date
我得到(如果我打印对象)
如果您使用NSLog()
或调试器查看NSDate
对象,它将使用[NSDate description]
生成字符串,该字符串将始终使用GMT时区。这不断地让人们吵闹。