2013-09-30 7 views
-1

dateByAddingTimeInterval:을 사용하여 현재 날짜에 8 일을 더하고 싶지만 이상한 결과가납니다. dateByAddingTimeInterval : 잘못된 결과를 내고 있습니다.

내가 사용하고 코드입니다 :

-(void)requestForGetEPGChannelsProgramsSucceed:(id)jsonResponse andEpgId:(NSString *)epgId forDate:(NSDate *)forDate dayOffset:(NSInteger)dayOffset 

    NSDate *dateWithOffset = [forDate dateByAddingTimeInterval:(dayOffset * 86400.0)]; 

forDate이 예 forDate를 들어 시간 0 분 0와 오늘의 날짜를 나타냅니다 30/09/2013 0시

dayOffset은 8입니다.

나는 8/10/2013 00:00을 얻을 것으로 예상되지만, 나는 얻지 못하는 값은 7/10/2013 23:00입니다.

왜 그럴까요? 누군가가 단서를 가지고 있습니까?

EDIT : 잘 나온 첫 번째 날짜가 IDT이고 며칠 후 IST를 사용하는 것으로 나타났습니다. 차이는 "이스라엘의 일광 시간"과 "이스라엘의 표준 시간"사이에 1 시간 차이입니다.

어떻게 장애물을 극복 할 수 있습니까?

+0

그것은 변경되지 않습니다 이번 주에 ... 이것이 이상한 이유입니다. 10 월 27 일에 변경됩니다. – user2328703

+0

또한 링크에서 솔루션을 시도했습니다. 작동하지 않았습니다. – user2328703

+0

일을 초로 변환하지 마십시오. Calendrical Calculations 설명서에 설명 된 적절한 방법을 사용해야합니다. – Abizern

답변

1

NSDates는 시간대의 개념이 없다, 그리고 당신에게 잘못된 결과를 줄 수있는 일일 추가 고정 된 시간 간격을 사용하여,이 두 가지가 개선 할 필요가 있기 때문에 :

NSDate *dateToBeOffset = [NSDate date]; 
NSDateComponents *dayComponent = [[NSDateComponents alloc] init]; 
[dayComponent setDay:8]; //Days you'd like to offset 
NSCalendar *theCalendar = [NSCalendar currentCalendar]; 
NSDate *offsetDate = [theCalendar dateByAddingComponents:dayComponent toDate:dateToBeOffset options:0]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"EET"]; // Eastern_European_Time 
[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
[dateFormatter setTimeZone:timeZone]; 

NSLog(@"%@", [dateFormatter stringFromDate:offsetDate]); 
관련 문제