没有得到正确的日期

时间:2014-12-23 04:23:15

标签: ios objective-c nsdate

您好我正在使用以下代码在当前日期的不同日期获取日期 但我得到错误的结果 请检查

-(void)calculateDate
{
   // NSArray *arrayOfNumbers = [NSArray arrayWithObjects:@"1","42",@"70",@"98", @"183",@"274",@"366",@"487", nil];

    NSArray *arrayOfNumbers=[NSArray arrayWithObjects:@"1",@"6",@"10",@"14",@"26",@"39",@"52",@"70", nil];

    NSMutableArray *dateArray=[[NSMutableArray alloc]init];

    for (int i=0; i<[arrayOfNumbers count]; i++) {
        NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
        int days=7 *[[arrayOfNumbers objectAtIndex:i] intValue];

        dayComponent.day = days;// days from above array of weeks 1 then 6 then 14 etc 
         NSCalendar *theCalendar = [NSCalendar currentCalendar];

        NSDate* dateIncrementByWeek = [theCalendar dateByAddingComponents:dayComponent toDate:[NSDate date] options:0];

        [dateArray addObject:dateIncrementByWeek];

    }
    NSLog(@"week dates=%@",dateArray);
}

这里显示错误的输出

 2014-12-29 18:27:11 +0000",
"2015-02-02 18:27:11 +0000",
"2015-03-02 18:27:11 +0000",
"2015-03-30 18:27:11 +0000",
"2015-06-22 18:27:11 +0000",
"2015-09-21 18:27:11 +0000",
"2015-12-21 18:27:11 +0000",
"2016-04-25 18:27:11 +0000"

2 个答案:

答案 0 :(得分:1)

输出对我来说是正确的,默认情况下NSLog将以UTC +00格式打印日期字符串(因此在输出上为+0000)。取决于您的时区,它将显示与系统时区不同的小时或天。

答案 1 :(得分:1)

  

当前日期不是2014年12月29日,之后是7 * 6 = 42天,它不应该是2015年2月2日

您没有打印当前日期,您看到的12月29日是您运行代码后的7天。

尝试使用从零开始的数字对象数组(NSNumber):

NSArray *arrayOfNumbers = @[ @0, @1, @4, ... ];

[注意使用现代短序进行数组构建@[ ... ])和NSNumber构造(@0等。)]

您现在将看到它从当前日期(UTC)开始。

HTH