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

标签 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];
}

我希望得到一些帮助:)

最佳答案

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

它使用 yyyy 来指定年份部分。一个常见的错误是使用 YYYY。 yyyy 指定日历年,而 YYYY 指定年份(“一年中的第几周”),用于 ISO 年-周日历。在大多数情况下,yyyy 和 YYYY 产生相同的数字,但它们可能不同。通常,您应该使用日历年。

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

关于ios - NSDate - 添加天数不会改变年份值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22480974/

相关文章:

ios - 如何获取 NSDictionary 中 NSArray 中的对象数

ios - iOS模拟器仅占据窗口的一部分

iphone - 如何在相关 View Controller 中获取我的 tabbarcontroller 的选定索引?

objective-c - 自定义 Getter & Setter iOS 5

Swift 无法将字符串日期解析为 Date 对象

ios - 快速过滤 [[NSDictionary]]

iphone - 如何在不复制 Xcode 4 项目的情况下从付费版本构建免费版本?

objective-c - 简单的? argv[] 转换为 char*

ios - 来自 NSDate 的 NSDateComponents 产生了意想不到的结果

swift - 比较 NSDate