-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 です。

私は 8/10/2013 00:00 を取得することを期待していますが、取得している (印刷していない) 値は 7/10/2013 23:00 です。

何故ですか?誰かが手がかりを持っていますか?

編集: 最初に出てくる日付は IDT で、数日後に IST を使用していることに気付きました。違いは「イスラエル夏時間」と「イスラエル標準時」の1時間の差です。

どうすればこの障害を乗り越えられるでしょうか?

4

1 に答える 1

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