NSDateComponents给出了奇怪的结果

时间:2010-11-10 09:11:19

标签: iphone objective-c nsdate nscalendar nsdatecomponents

我正在创建每周日历视图,其中一部分是计算显示周的第一天。我还希望保存的日期有第一秒的时间,所以我试图确保日期的hh:mm:ss都是00:00:00。

我有以下代码,在大多数情况下都能正常运行,但是当日期大约是一年的开始或结束时,它会产生看似随机的结果。

unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

NSDateComponents *comps = [gregorian components:unitFlags fromDate:self.selectedDate];
NSDateComponents *addcomps = [[NSDateComponents alloc] init];
[addcomps setDay:1-[comps weekday]];

NSDate *fixedDate = [appDelegate.gregorian dateByAddingComponents:addcomps toDate:self.selectedDate options:0];
////FIXED DATE IS NOW FIRST DAY OF DISPLAYED WEEK

comps = [appDelegate.gregorian components:unitFlags fromDate:fixedDate]; ///fixedDate = 2010-01-03 02:51:25 -0600
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];
self.savedBeginningDate = [appDelegate.gregorian dateFromComponents:comps]; ///self.savedBeginningDate = 2011-01-09 00:00:00 -0600

以某种方式将hh:mm:ss设置为00:00:00会将日期从2010年1月3日更改为2009年1月11日。

我已将dateFromComponents的结果添加为对这些行的注释。这种奇怪的行为似乎只发生在一年左右,并且在我见过的任何其他一周都没有发生。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我已经想到了这一点:我必须从unitFlags中取出NSWeekCalendarUnit。不知道为什么,但由于某种原因,那里的日期计算不正确!