【问题标题】:NSDate and DateByAddingComponents problemNSDate 和 DateByAddingComponents 问题
【发布时间】:2011-05-03 09:47:28
【问题描述】:

我正在处理我的应用程序中的这个功能。我必须展示一些不同时期的不同图形。通过滑动当前图表来选择周期。

我在使用 DateComponents 时遇到了一些麻烦。当我测试应用程序时,我显示了由 dateByAddingComponents 编辑的日期,它在控制台中看起来像这样:

Date : 2009-12-14 10:06:13 GMT
Date : 2009-11-13 10:06:13 GMT
Date : 2009-10-12 09:06:13 GMT
Date : 2009-09-11 09:06:13 GMT
Date : 2009-08-10 09:06:13 GMT
Date : 2009-07-09 09:06:13 GMT
Date : 2009-06-08 09:06:13 GMT
Date : 2009-05-07 09:06:13 GMT
Date : 2009-04-06 09:06:13 GMT
Date : 2009-03-05 10:06:13 GMT
Date : 2009-02-04 10:06:13 GMT
Date : 2009-01-03 10:06:13 GMT
Date : 2008-12-02 10:06:13 GMT
Date : 2008-11-01 10:06:13 GMT
Date : 2008-09-30 09:06:13 GMT
Date : 2008-08-29 09:06:13 GMT

如您所见,小时有时会发生变化,但最大的问题是会错过一个月(2008 年的第 10 个月)。

有为这些动作实现的代码:

if (currentPosition.x > gestureStartPoint.x) {
        switch (self.segmentedControl.selectedSegmentIndex) {
            case 0:
                [dateComponents setDay:-1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            case 1:
                //NSLog(@"before : %@", date);
                [dateComponents setMonth:-1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            case 2:
                //NSLog(@"before : %@", date);
                [dateComponents setYear:-1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            default:
                break;
        }

    }
    else if(currentPosition.x <= gestureStartPoint.x){
        switch (self.segmentedControl.selectedSegmentIndex) {
            case 0:
                [dateComponents setDay:1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            case 1:
                [dateComponents setMonth:1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            case 2:
                [dateComponents setYear:1];
                self.date = [gregorian dateByAddingComponents:dateComponents toDate:self.date options:0];
                NSLog(@"Date : %@", date);
                break;
            default:
                break;
        }
    }

怎么解决???

【问题讨论】:

    标签: iphone date nsdate nsdatecomponents


    【解决方案1】:

    我该如何解决?

    通过更加小心。从您向我们展示的日志中可以清楚地看出,您每次都将日期减少 1 个月 1 天。所以很自然,当你到达 2008-11-01 时,下一个日期是 2008-09-30。

    时间差一小时是因为您所在时区的夏令时。

    【讨论】:

    • 感谢有关小时数的指示。这一个月,我不知道我在哪里减少了一天......我完成了重新阅读整个课程,我没有看到任何那种错误。当我强制 dateComponents ([dateComponents setDay:0], setMonth:1 and setYear:0 后跟 dateByAddingComponents) 时,错误仍然运行...
    • 其实我在使用后不得不将dateComponents设置为0,否则,所有对datecomponent的修改都会被保存和de/recrementated
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多