我正在尝试使用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小时差异。
我如何克服这个障碍?
答案 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]);