dateByAddingTimeInterval中的错误

Dee*_*uti 1 date objective-c nsdate foundation ios

几乎疯狂地搜索我的代码失败的地方......我能够隔离这种奇怪的行为.减去-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);
Run Code Online (Sandbox Code Playgroud)

日志:

2013-07-19 15:58:46.123 Vendes [2927:907]现在: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];
Run Code Online (Sandbox Code Playgroud)

适用于任何daysToAdd值.

tia*_*tia 5

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

@"yyyy-MM-dd"
Run Code Online (Sandbox Code Playgroud)

低壳的 y


有关上层Y的更多信息:

Y - 年份(基于"年度周"的日历).今年的指定用于ISO 8601定义的ISO年 - 周日历,但可用于需要周日处理的非基于格里高利的日历系统.可能并不总是与日历年相同的值.

  • 从Apple关于日期格式的文档:"常见错误是使用YYYY.yyyy指定日历年,而YYYY指定年份("年度周"),在ISO年 - 周日历中使用.在大多数情况下,yyyy和YYYY产生相同的数字,但它们可能不同.通常你应该使用日历年." https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1 (2认同)