dateByAddingTimeInterval:给出错误的结果

时间:2013-09-30 07:10:14

标签: objective-c nsdate foundation nstimeinterval

我正在尝试使用dateByAddingTimeInterval:将8天添加到我当前的日期,但它给了我一个奇怪的结果。

这是我正在使用的代码:

-(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小时差异。

我如何克服这个障碍?

1 个答案:

答案 0 :(得分:1)

由于NSDates没有时区概念,并且使用固定时间间隔添加1天可能会给您不正确的结果,因此您需要改进两件事:

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