2011-07-21 28 views
1

我想增加我的NSDate。我有一个NSDictionary,我试图增加我的NSDate内容。说我的NSDate是2011-07-11,我想增加它的NSDate内容。如何更改nsdictionary中的nsdate

{  
    ConditionDatenew = "2011-07-21 13:31:46 +0000"; 
    Yesterday = "2011-07-20 13:31:46 +0000"; 
    city = #; 
    condition = "Isolated Thunderstorms"; 
    country = #; 

    "day_of_week" = Sun; 
    high = 86; 
    icon = "chance_of_storm.gif"; 
    low = 68; 

    state = #; 
} 

我只是想获得日期2011-07-22在我ConditionDatenew在未来字典循环。我怎么才能得到它?

回答

1

创建一个新的日期对象,并替换字典中的旧值。日期是不可变的。

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问题比确保所有日期创建代码始终正确更容易。所以我建议习惯日期组件。

+0

如何建立新的对象......我的字典对象conditiondate是没有得到增量..... – new

+0

当你说“增量”你的意思“设置为现在“或”添加一些东西?“ '[NSDate date]'会给你“现在”。 –

+0

我的意思是添加一些东西..我的日子应该增加1天,每次循环运行...我解析我的日期在字典中...... – new

0

试试这个:

NSDate *newDate = [NSDate date]; 
[dictionary setValue:newDate forKey:@"ConditionDatenew"]; 
+0

没有理由在这里使用'-description'。你可以直接在'NSDictionary'中存储'NSDate',这样更灵活。 –