NSDateComponents包装

时间:2012-02-28 20:32:54

标签: objective-c nsdate wrapping nsdatecomponents

这里是设置:

NSDateComponents* temporalComponents;

temporalComponents = [theDateComponents copy];  //another component set to todays date.

[temporalComponents setDay:   [temporalComponents day] + (offset * 7)]

如果我输出组件的结果,则表明正确添加了天数,例如21天。

"<NSDateComponents: 0x6a48820>\n    Calendar Year: 2012\n    Month: 2\n    Day: 49\n    Hour: 13\n    Minute: 12"

但当然我希望它有这个更正的“包装”组件列表,其中月份增加并且日期被更正..(主要是因为我做了进一步的操作,我可以替换整个组件,而不是仅仅添加到在其他方面,我的最终产品是NSDateComponent,因此可以进一步操作。

"<NSDateComponents: 0x6a48820>\n    Calendar Year: 2012\n    Month: 3\n    Day: 20\n    Hour: 13\n    Minute: 12"

现在我这样做是为了正确地包裹日子(以及其他任何需要包裹的东西)

NSDate* tempDate = [CURRENTC dateFromComponents:temporalComponents];

temporalComponents2 = [CURRENTC components:unitFlags fromDate:tempDate];

[theDatesArray addObject: temporalComponents2];

有没有更好的方法?无需去约会,回到组件。我找到了一个没有成功的更好的方法,也许我正在用错误的术语进行搜索。

1 个答案:

答案 0 :(得分:0)

用于将给定偏移量添加到给定日期的方法是使用NSCalendar的{​​{3}}。所以你会做这样的事情:

NSDateComponents *daysToAdd = [[[NSDateComponents alloc] init] autorelease];
daysToAdd.day = 23;

NSDate *derivedData =
      [CURRENTC dateByAddingComponents:daysToAdd
                toDate:sourceDate
                options:NSWrapCalendarComponents];

隐含的假设是你通常将事物存储为NSDate,而NSDateComponents是帮助者,允许你相对于给定的NSCalendar操纵它们。

所以在你的情况下,我认为你没有比你做的更好,因为你正在使用Apple认为帮助者作为实际存储的东西。