Я пытаюсь использовать [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:date]
в две разные даты, чтобы увидеть, выпадают ли они в тот же день. Однако, если мой часовой пояс отличается (скажем, где-то в Германии), хотя даты, очевидно, одинаковы, дни, которые были возвращены, различны. Если я использую NSYearCalendarUnit
вместо NSEraCalendarUnit
в те же даты, возвращаемые значения совпадают.NSCalendar получение разницы в день неверно
Единственная проблема с использованием 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
*/
У меня такая же проблема. Кажется, что эра начинается в фиксированное время, скажем 00:00:01 1. января года 1 GMT. NSYearCalendarUnit, похоже, начинается в 00:00:01 1. января, но в часовом поясе NSCalendar, который может не быть GMT. Это может объяснить, почему результаты года/года различаются. Я собираюсь заполнить отчет об ошибке. Это делает метод обыденности бесполезным для дневной разницы, если дни не в том же году. –