Я пытаюсь использовать [[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
*/
См. 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. Время, прошедшее через ноль, эквивалентно следующему дню.
Может быть, это можно трактовать как ошибку: часы в сутках от первого по двадцать третье до нулевого ? Предлагаю: заполнить отчет об ошибке.