创建一个新的日期对象,并替换字典中的旧值。日期是不可变的。
NSDate *newDate = [NSDate date];
[dictionary setObject:newDate forKey:@"ConditionDatenew"];
[NSDate date]
将设置为“now”。
添加一天最简单的方法是添加24小时。只要DST永远不是问题,这一方法就行得通,“通过增加一天”意味着“增加24小时”。如果你只使用UTC工作,那很好。
NSDate *newDate = [oldDate dateByAddingTimeInterval:24*60*60];
如果DST是一个问题(而且通常是),并以“增加一天”你的意思是“一个公历日增”,那么你需要使用最新组件,以确保你补充23,酌情24或25小时。
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setYear:2011];
[dateComponents setMonth:11];
[dateComponents setDay:6];
[dateComponents setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]];
NSDate *date = [calendar dateFromComponents:dateComponents];
NSDateComponents *addComponents = [[NSDateComponents alloc] init];
[addComponents setDay:1];
[addComponents setTimeZone:[NSTimeZone localTimeZone]];
NSDate *newDate = [calendar dateByAddingComponents:addComponents toDate:date options:0];
NSLog(@"oldDate=%@", [date descriptionWithLocale:[NSLocale currentLocale]]);
NSLog(@"+24=%@", [[date dateByAddingTimeInterval:24*60*60] descriptionWithLocale:[NSLocale currentLocale]]);
NSLog(@"newDate=%@", [newDate descriptionWithLocale:[NSLocale currentLocale]]);
[calendar release];
[dateComponents release];
[addComponents release];
输出:
oldDate=Sunday, November 6, 2011 12:00:00 AM Eastern Daylight Time
+24=Sunday, November 6, 2011 11:00:00 PM Eastern Standard Time
newDate=Monday, November 7, 2011 12:00:00 AM Eastern Standard Time
如果你不计较时间,并有超过你将它设置为控制,一招是设置时间到了中午。那样增加24小时将总是在正确的一天。我通常不建议这样做,因为如果你忘记和创建一个午夜时间的日期,它会失败。将所有日增量代码放在一个地方并修复DST问题比确保所有日期创建代码始终正确更容易。所以我建议习惯日期组件。
如何建立新的对象......我的字典对象conditiondate是没有得到增量..... – new
当你说“增量”你的意思“设置为现在“或”添加一些东西?“ '[NSDate date]'会给你“现在”。 –
我的意思是添加一些东西..我的日子应该增加1天,每次循环运行...我解析我的日期在字典中...... – new