[[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:date]
두 가지 다른 날짜에 [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:date]
을 사용하여 같은 날에 속하는지 확인하려고합니다. 그러나 내 시간대가 다른 경우 (예 : 독일 어딘가), 날짜가 분명히 동일하더라도 반환되는 날짜가 다릅니다. 같은 날짜에 NSEraCalendarUnit
대신 NSYearCalendarUnit
을 사용하면 반환 값은 같습니다.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
*/
동일한 문제가 있습니다. 1시 1 분 GMT의 1 월 1 일 00시 1 분 1 초입니다. NSYearCalendarUnit은 1 월 1 일 00:00:01에 시작하는 것으로 보이지만 NSCalendar 시간대는 GMT가 아닐 수 있습니다. 이것은 왜 시대/연도 결과가 다른지 설명 할 수 있습니다. 버그 보고서를 작성하려고합니다. 이렇게하면 일이 같은 해가 아닌 경우 일차 차이에 대한 법칙 방법은 쓸모 없게됩니다. –