2013-09-30 355 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]);