在几乎疯狂搜索我的代码失败后...我能够隔离这种奇怪的行为。看看减去-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值。
答案 0 :(得分:5)
这不是一个错误。你使用的格式是错误的。它应该是
@"yyyy-MM-dd"
使用较低的y
More information关于上层Y:
Y
- 年份(以“年度周”为基础的日历)。今年的名称 用于ISO 8601定义的ISO年 - 周日历,但也可以 用于非基于公历的日历系统 需要处理。 可能并不总是与日历相同的值 年。强>