-1

我正在尝试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。

我希望得到 2013 年 8 月 10 日 00:00,但我得到的值(不打印)是 2013 年 7 月 10 日 23:00。

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

编辑:我刚刚注意到第一个结果很好的日期是 IDT,几天后它使用 IST。“以色列白天时间”和“以色列标准时间”之间的差异是 1 小时。

我该如何克服这个障碍?

4

1 回答 1

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]);
于 2013-09-30T08:23:25.080 回答