NSDate для каждого дня месяца

Я просмотрел stackoverflow, но ни одно из решений не сработало. Я хочу сгенерировать массив дней в месяц NSDate, это код, который я использую (год и месяц жестко запрограммированы на данный момент):

NSCalendar *c = [NSCalendar currentCalendar];
NSRange days = [c rangeOfUnit:NSCalendarUnitDay
                       inUnit:NSCalendarUnitMonth
                      forDate:today];

for (int i = 1; i <= days.length; i++) {
    NSDateComponents *dc = [NSDateComponents new];
    [dc setYear:2015];
    [dc setMonth:12];
    [dc setDay:i];
    NSDate *d = [calendar dateFromComponents:dc];
    [arrayDates addObject:d];
}

Проблема в том, что первыми объектами всегда будут (предыдущий месяц последний день):

2015-11-30 23:00:00 +0000

и последним будет (не последний день текущего месяца) 2015-12-30 23:00:00 +0000

Я пробовал установить разные языковые стандарты и параметры календаря, но ничего не помогает .. есть идеи?

Спасибо


person zevonja    schedule 13.12.2015    source источник


Ответы (1)


Это похоже на проблему часового пояса / локали. Интересно, исчезнет ли это, если вы установите явный языковой стандарт, а также явный час в середине дня:

[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

Затем, когда вы создаете даты, что-то вроде этого:

[dc setHour:12];

Причина, по которой я думаю, что это проблема часового пояса / локали, заключается в том, что я попробовал ваш код здесь, и он сработал точно с первого раза.

person TwoStraws    schedule 13.12.2015
comment
Привет! Спасибо за ответ, но это сработает, если вы установите месяц: 12, но попробуйте установить месяц: 11, вы получите 31 день, что неверно, должно быть 30 дней. - person zevonja; 13.12.2015
comment
Я ожидаю, что это связано с тем, что days вычисляется с использованием переменной с именем today, которая, как мне кажется, наступила буквально сегодня, то есть в день декабря. - person TwoStraws; 13.12.2015
comment
Вы абсолютно правы, мне определенно нужен перерыв. Спасибо! - person zevonja; 13.12.2015
comment
Добро пожаловать! Это научит вас работать допоздна в воскресенье вечером;) - person TwoStraws; 13.12.2015
comment
Ночь еще молода, друг мой! :) Еще раз, спасибо! - person zevonja; 13.12.2015