NSDate - 添加天数不会改变年份值

时间:2014-03-18 13:32:38

标签: ios objective-c nsdate nsdatecomponents

我有一个标签,我想要保留一个特定的日期。初始日期应该是当前日期,并且用户应该能够以一天的间隔逐步完成该时间。经过一番研究后,我发现最好设置NSDateComponents并将它们添加到当前日期。

我的问题如下:当我逐步完成时,一切似乎都很好,直到我到达年底/年初。例如,标签中的日期保留是01.01.2014,当我点击" previousDayButton"它将成为31.12.2014。我考虑过要求日期,然后手动设置年份,但我无法想到这是解决方案。

所以这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self setupInterface];
}
- (void)setupInterface{
    orderDate = [NSDate date];
    [self updateDateLbl];
}

- (void)updateDateLbl{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"dd.MM.YYYY"];
    dateLbl.text = [dateFormatter stringFromDate:orderDate];    
}

- (IBAction)nextDay:(id)sender {
    NSDateComponents *comps = [[NSDateComponents alloc]init];
    comps.day = 1;

    orderDate = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:orderDate options:0];
    [self updateDateLbl];
}

- (IBAction)previousDay:(id)sender {
    NSDateComponents *comps = [[NSDateComponents alloc]init];
    comps.day = -1;
    orderDate = [[NSCalendar currentCalendar] dateByAddingComponents:comps toDate:orderDate options:0];
    [self updateDateLbl];
}

我希望得到一些帮助:)

1 个答案:

答案 0 :(得分:3)

对NSDateFormatter使用Xcode帮助。来自文档:

它使用yyyy指定年份组件。一个常见的错误是使用YYYY。 yyyy指定日历年,而YYYY指定ISO年度日历中使用的年份(“年度周”)。在大多数情况下,yyyy和YYYY会产生相同的数字,但它们可能会有所不同。通常,您应该使用日历年。

2014年周三开始。 2013年12月31日星期二,同一周 - 2014年第1周。这就是YYYY所展示的。 yyyy展示2013年。