私のアプリは、localendar.com からのフィードを使用して、今後のイベントのテーブルビューを作成します。ただし、localendar からのフィードは DST を考慮していないため、フィードの pubDate がイベントの実際の開始より 1 時間遅れて表示されるという問題があります。私のアプリはフィードを解析し、日付をセルの詳細行に取り込むため、混乱を招きます。ユーザーが DST に参加しているかどうかをアプリで検出し、DST に参加している場合は、日付から 1 時間を減算しようとしています。ただし、以下のコードを使用しても何も変化せず、isDaylightSavingsTime プロパティ タグで NSLog が呼び出されることはありません。
アップデート:
私は cellForRowAtIndexPath でそれを変更する別のアプローチを試みました:
NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSString *articleDateString = [dateFormatter stringFromDate:entry.articleDate];
NSLog(@"after formatter %@", articleDateString);
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", articleDateString];
問題は、RSS フィードの pubDate の時刻が DST に合わせて調整されないため、1 年の半分が 1 時間ずれるということです。米国時間ではなく GMT を使用しているため、フィード内の時間はすでに間違っているため、フォーマッタはタイム ゾーンによってすべてを正しく処理します。
これを閉じるために投票しないでください。これはあまりローカライズされたものではなく、サマータイムがある米国のすべての州に適用されます。
この問題をよりよく説明するための 2 つの写真を次に示します。1 つ目は RSS フィードの内容を示し、2 つ目はカレンダーの正確な時刻を示します。
ご覧のとおり、フィードのその時間は 10:00 として表示されますが、RSS フィードではすべての場所を表示する実際の時間は次のように表示されます。
更新 2:
コードでタイムゾーンを手動で Central に設定しようとしましたが、それでも同じことが起こります。cellForRowAtIndexPath には次のものがあります。
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"America/Menominee"]];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", articleDateString];
ただし、detailTextLabel.text を取得して 5/27/13 10:00 PM を表示する代わりに、5/27/13 11:00 PM を表示します。