NSCalendar понимающий превратно дневного различия

Я пытаюсь использовать [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:date] в две различных даты, чтобы видеть, падают ли они в тот же день. Однако, если мой часовой пояс отличается (скажите, где-нибудь в Германии), даже при том, что даты являются, очевидно, тем же, возвращенные дни отличаются. Если я использую NSYearCalendarUnit вместо NSEraCalendarUnit в те же даты возвращаемым значения является то же.

Единственная проблема с использованием NSYearCalendarUnit это, возвращает то же значение в течение того же дня различных лет, и не просто определить количество дней между двумя датами, если они падают на различные годы.

Какие-либо идеи что случилось или как более легко определить, в тот же день ли две даты, или определить количество дней между ними?

Пример:

[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Berlin"]];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDate *date1 = [NSDate dateWithTimeIntervalSinceReferenceDate:300751200];
NSDate *date2 = [NSDate dateWithTimeIntervalSinceReferenceDate:300836062.388569];

NSLog(@"\nDate 1: %@\nDate 2: %@",date1,date2);
/*Output:
Date 1: 2010-07-14 00:00:00 +0200
Date 2: 2010-07-14 23:34:22 +0200
*/

int day1 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit
                         forDate:date1];
int day2 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit
                         forDate:date2];

NSLog(@"\nDay 1: %i\nDay 2: %i",day1,day2);
/*Output:
  Day 1: 733966
  Day 2: 733967
*/

day1 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit
                     forDate:date1];
day2 = [cal ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit
                     forDate:date2];

NSLog(@"\nDay 1:%i\nDay 2: %i",day1,day2);
/*Output:
  Day 1: 195
  Day 2: 195
*/
7
задан Ed Marty 14 July 2010 в 22:14
поделиться

1 ответ

См. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/Reference/NSCalendar.html : «Обсуждение

Порядковый номер в большинстве случаев не совпадает с разложенным значением единицы. Обычно возвращаемые значения - 1 и больше. Например, время 00:45 соответствует первому часу дня, а для единиц Час и День соответственно результат будет 1. Исключением является расчет недели в месяц, который возвращает 0 для дней, предшествующих первому. неделя в месяце, содержащем дату ».

Другими словами: 23:34:22 принадлежит последнему часу дня, приближаясь к 24 0. Время, прошедшее через ноль, эквивалентно следующему дню.

Может быть, это можно трактовать как ошибку: часы в сутках от первого по двадцать третье до нулевого ? Предлагаю: заполнить отчет об ошибке.

2
ответ дан 7 December 2019 в 05:17
поделиться