1

在几乎疯狂地搜索我的代码失败的地方之后......我能够隔离这种奇怪的行为。看看减去-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] 现在: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 .. ?? :)

任何想法?

谢谢

PS。我用它解决了

NSDate *newDate1= [NSDate dateWithTimeInterval:60*60*daysToAdd sinceDate:now];

适用于任何 daysToAdd 值。

4

1 回答 1

5

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

@"yyyy-MM-dd"

小写的y


有关大写 Y 的更多信息:

Y - 年(在基于“一年中的一周”的日历中)。此年份名称用于 ISO 8601 定义的 ISO 年-周日历,但也可用于需要处理周日期的非公历日历系统中。可能并不总是与日历年相同。

于 2013-07-19T17:07:20.173 回答