我无法弄清楚为什么我的手机使用本地时区的代码不起作用

时间:2013-11-07 08:28:09

标签: ios objective-c timezone nsdate

我正在编写一个使用UINotifications的应用程序,我的代码对通知起作用,但无法获得正确的时区。

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

// Get the current date
NSDate *pickerDate = [self.datePicker date];
// Break the date up into components
NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSTimeZoneCalendarUnit)
                                               fromDate:pickerDate];
NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
                                               fromDate:pickerDate];

我很确定我在上面的NSDateComponents中正确使用它

// Set up the fire time
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];
[dateComps setHour:[timeComponents hour]];

我非常确定应该为当前手机位置设置时区

[dateComps setTimeZone:[dateComponents timeZone]];

[dateComps setMinute:[timeComponents minute]];
[dateComps setSecond:[timeComponents second]];
NSDate *itemDate = [calendar dateFromComponents:dateComps];

NSLog(@"%@",[NSString stringWithFormat:@"%@",itemDate]);

我尝试将itemDate转储到日志文件中,我得到的内容看起来像GMT

2013-11-07 00:24:14.559 IMOB[796:60b] 2013-11-07 08:23:56 +0000

正如您在日志文件行开头的时间戳中看到的那样,它显示早上12:24正确但输出结果为08:23

出了什么问题

1 个答案:

答案 0 :(得分:1)

NSDate个对象始终为UTC。使用NSDateFormatter根据您的区域设置记录值。

[NSDateFormatter localizedStringFromDate:dateStyle:timeStyle:]非常方便。