dateByAddingTimeInterval中的错误

时间:2013-07-19 16:53:30

标签: ios objective-c date nsdate foundation

在几乎疯狂搜索我的代码失败后...我能够隔离这种奇怪的行为。看看减去-200天时的情况


NSDate *now = [NSDate date]; //now is 2013-07-19

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"YYYY-MM-dd"];

NSDate *newDate1 = [now  dateByAddingTimeInterval:60*60*24*-199];
newDateTmp=[format stringFromDate:newDate1];
NSLog(@"now:%@ newDateTmp:%@",now,newDateTmp);

newDate1 = [now  dateByAddingTimeInterval:60*60*24*-200];
newDateTmp=[format stringFromDate:newDate1];
NSLog(@"now:%@ newDateTmp:%@",now,newDateTmp);

newDate1 = [now  dateByAddingTimeInterval:60*60*24*-201];
newDateTmp=[format stringFromDate:newDate1];
NSLog(@"now:%@ newDateTmp:%@",now,newDateTmp);

newDate1 = [now  dateByAddingTimeInterval:60*60*24*-365];
newDateTmp=[format stringFromDate:newDate1];
NSLog(@"now:%@ newDateTmp:%@",now,newDateTmp);

日志:

2013-07-19 15:58:46.123 Vendes [2927:907] now:2013-07-19 13:58:46 +0000 newDateTmp:2013-01-01 //这没关系

2013-07-19 15:58:46.124 Vendes [2927:907]现在:2013-07-19 13:58:46 +0000 newDateTmp:2013-12-31 //这是不正确的! !看看年份

2013-07-19 15:58:46.125 Vendes [2927:907]现在:2013-07-19 13:58:46 +0000 newDateTmp:2012-12-30 //这没关系

2013-07-19 15:58:46.127 Vendes [2927:907]现在:2013-07-19 13:58:46 +0000 newDateTmp:2012-07-19 //这没关系


我猜明天还会打开201 ... :)

有什么想法吗?

THKS

PS。我用

解决了这个问题
NSDate *newDate1= [NSDate dateWithTimeInterval:60*60*daysToAdd sinceDate:now];

适用于任何daysToAdd值。

1 个答案:

答案 0 :(得分:5)

这不是一个错误。你使用的格式是错误的。它应该是

@"yyyy-MM-dd"

使用较低的y


More information关于上层Y:

  

Y - 年份(以“年度周”为基础的日历)。今年的名称   用于ISO 8601定义的ISO年 - 周日历,但也可以   用于非基于公历的日历系统   需要处理。 可能并不总是与日历相同的值   年。