2013-09-30 178 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代表了当今与0小时和分钟0日期在这个例子中forDate被30/09/2013 00:00

dayOffset是8.

我期望得到8/10/2013 00:00,但我得到的价值(不打印)是7/10/2013 23:00。

这是为什么?有人有线索吗?

编辑:我刚刚注意到第一次出来的日期是IDT,几天后它使用IST。区别在于“以色列日光时间”和1小时不同的“以色列标准时间”。

我该如何克服这个障碍?

+0

它不会改变本周......这就是为什么它很奇怪。它在10月27日更改 – user2328703

+0

另外,我在链接上尝试了解决方案..没有工作 – user2328703

+0

不要将日期转换为秒,您应该使用Calendrical Calculations文档中描述的适当方法。 – Abizern

回答

1

由于NSDates没有时区的概念,并采用固定的时间间隔来加1天可能给你不正确的结果,有2两件事情你需要改进:

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]);