3

私のアプリは、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 を表示します。

4

2 に答える 2

1

の使用を勧める

[formatter setTimeZone:localTimeZone];

代わりは。

于 2013-05-24T19:06:20.387 に答える
0

問題は、すべての日付が「CST」で表示されていることですが、DST の修正を行っているようです。CST が YES を返すことはありません。これはisDaylightSavingTime、そのように定義されているためです。サマータイムが実施されると、「Central Time」が CST から CDT に変わります。

これを修正する最も簡単な方法は、フィードからのタイムゾーン識別子を無視し、常に日付を[NSTimeZone timeZoneWithName:@"America/Menominee"]. (または中央時間の他のタイムゾーン。)

編集:明確にするために、表示用にフォーマットするときではなく、日付を解析するときに NSDateFormatter のタイムゾーンを設定する必要があります。つまり、行う必要がある変更は、表示するコードにはありません。

于 2013-05-25T13:18:00.643 に答える