NSDateComponents дает странные результаты - PullRequest
2 голосов
/ 10 ноября 2010

Я создаю еженедельное представление календаря, и часть этого вычисляет первый день отображаемой недели.Я также хочу, чтобы сохраненная дата имела время самой первой секунды, поэтому я пытаюсь убедиться, что чч: мм: сс для даты - все 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

Каким-то образом установка чч: мм: сс в 00:00:00дата с 3 января 2010 по 11 января 2009 года.

Я добавил результаты dateFromComponents в качестве комментариев к этим строкам.Такое странное поведение, по-видимому, происходит только тогда, когда отмечается год, и не происходит ни в одну другую неделю, которую я видел.

Спасибо за любую помощь!

1 Ответ

1 голос
/ 12 ноября 2010

Я понял это: мне пришлось вынуть NSWeekCalendarUnit из блока Флаги.Понятия не имею, почему, но по какой-то причине, там даты вычислялись неправильно!

...