Xcode4 执行代码时给出错误的时间

Xcode4 执行代码时给出错误的时间,xcode4,nsdate,Xcode4,Nsdate,我正在创建一个简单的闹钟应用程序。问题是我在日志中得到了错误的输出日期,我不知道为什么。请设法解决我的问题。下面是我的代码: 下面的代码用于init方法,然后正常工作,而我将下面的代码用于viewdidLoad,那么它不工作 NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; // Get the current date NSDate *pickerDate = [self.datePicker date]

我正在创建一个简单的闹钟应用程序。问题是我在日志中得到了错误的输出日期,我不知道为什么。请设法解决我的问题。下面是我的代码:

下面的代码用于init方法,然后正常工作,而我将下面的代码用于viewdidLoad,那么它不工作

    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 ) 
                                               fromDate:pickerDate];
NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) 
                                               fromDate:pickerDate];


NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];
[dateComps setHour:[timeComponents hour]];

[dateComps setMinute:[timeComponents minute]];
[dateComps setSecond:[timeComponents second]];
NSDate *itemDate = [calendar dateFromComponents:dateComps];
        NSLog(@"date components are:>>%@",dateComps);
NSLog(@"Item date is ::>>%@",itemDate);


[dateComps release];
在这种情况下,虽然打印对象比它显示的日期和时区错误,但在这里。 请帮忙解决这个问题

@塞缪尔

试着输入:

NSDate *pickerDate = [NSDate date];
验证您的代码是否存在问题。如果执行此操作后在NSLog中获得了正确的日期,则代码正常,并且问题可能出在您可能使用的UIDatePicker控件中?那就试着去做吧

NSDate *pickerDate = [self.datePicker date];
NSLog(@"Date = %@", pickerDate);
首先验证是否从日期选择器控件获取正确的值

此代码应放在viewDidLoad方法中。我从上面完全复制了你的代码,它在我的应用程序上运行得非常好


问:您是说您的代码在init中工作得很好,但在viewDidLoad方法中工作得不正确吗?

经过多次搜索,找到了原因

当选取到pickerviewcontroller中的任何日期时,始终为5+000 gmt格式

如果我们需要将日期转换为本地时区,我们需要在项目中使用DateFormatter类来实现下面的代码

NSDateFormatter* df_local = [[NSDateFormatter alloc] init];
[df_local setTimeZone:[NSTimeZone localTimeZone]];
[df_local setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
// [df_local stringFromDate:date];

NSString *strForArr=[self.arForSubTitle objectAtIndex:0];
NSString *newStr = [strForArr substringToIndex:[strForArr length]-5];
NSDate *theDate = [df_local dateFromString:newStr];        

NSLog(@"%@",[theDate description]);
谢谢和问候

@塞缪尔