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

时间:2012-02-03 13:30:01

标签: xcode4 nsdate

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

以下代码用于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];

虽然打印对象比它显示错误的日期和时区问题aries在这里。 请帮助解决这个问题

@samuel

2 个答案:

答案 0 :(得分:0)

尝试输入:

NSDate *pickerDate = [NSDate date];

验证您的代码没有问题。如果您在执行该操作后在NSLog中获得了正确的日期,那么您的代码就可以了,问题可能出在您可能正在使用的UIDatePicker控件中?那么接着尝试

NSDate *pickerDate = [self.datePicker date];
NSLog(@"Date = %@", pickerDate);

验证您是否首先从日期选择器控件中获取正确的值。

此代码应放在viewDidLoad方法中。我从上面完全复制了你的代码,它完全适用于我的应用程序。

问题:您是说您的代码完全在 init 中工作,但在viewDidLoad方法中工作不正确?

答案 1 :(得分:0)

经过多次搜索后找到原因

当挑选到pickerviewcontroller的任何日期时,只有五个+50 gmt格式

如果我们需要将日期转换为本地时区,我们需要将dateformater类用于该项目的下面代码。

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

谢谢和问候

@samuel。