Цель- C: получить количество календарных дней между двумя датами. - PullRequest
0 голосов
/ 24 января 2020

Я просто не получаю правильный результат ... поэтому в зависимости от часового пояса я хочу разницу календарных дней между двумя датами. Итак, если один начинается в 23:00 в день 1 и заканчивается в 14:00 в день 2, он должен вернуть 1. Теперь мой метод возвращает 0, почему? Потому что сейчас меньше 24 часов? Пример:

MY Nslog:

CheckForPictures departure date: Tue Jan 28 23:10:00 2020 destinationDate: Wed Jan 29 09:30:00 2020 in timeZone:Europe/Zurich and get a day difference: 0

(у компьютера также есть часовой пояс Цюрих, поэтому это местное время)

Мой метод:

NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:timeZone];

NSDateComponents *components = [calendar components:NSCalendarUnitDay
                                                    fromDate:self.departureTime
                                                      toDate:self.destinationTime
                                                     options:0];

NSLog(@"CheckForPictures departure date: %@ destinationDate: %@ in timeZone:%@ and get a day difference: %ld", self.departureTime, self.destinationTime, timeZone.name, components.day);

return components.day;

И этот код возвращает 0 и журналы выше журнала ...

Ответы [ 2 ]

0 голосов
/ 24 января 2020

При помощи Craigs я придумал это решение:

- (NSInteger)calendarDaysBetweenDepartureAndArrivalTimeForTimeZone:(NSTimeZone *)timeZone
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    [calendar setTimeZone:timeZone];

    NSDateComponents *departureComponents = [calendar components:(NSCalendarUnitDay) fromDate:self.departureTime];
    NSDateComponents *destinationComponents = [calendar components:(NSCalendarUnitDay) fromDate:self.destinationTime];

    NSInteger difference = destinationComponents.day - departureComponents.day;
    if(difference < 0){
        //Month overlapping
        NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:self.departureTime];
        difference = range.length - departureComponents.day + departureComponents.day;
    }

    NSLog(@"CheckForPictures departure date: %@ destinationDate: %@ in timeZone:%@ and get a day difference: %ld", self.departureTime, self.destinationTime, timeZone.name, difference);

    return difference;
}
0 голосов
/ 24 января 2020

Я полагаю, вы задаете NSCalendar неправильный вопрос. Вы хотите знать, отличается ли дата прибытия от даты отъезда, но вы спрашиваете количество дней между прибытием и отъездом. Изменение даты может произойти, даже если разница во времени составляет всего несколько минут. «Несколько минут» округляет до «0 дней», если вы спросите, сколько дней прошло.

Вы действительно хотите знать, изменилась ли дата . Я думаю, что я буду делать что-то вроде получения дня месяца для каждой даты и сравнения этого. Поскольку ни один месяц не имеет 1 дня, я думаю, что это сработает.

...