0

タイムゾーンの問題が原因でNSDate、どこかで立ち往生しています。NSDateFormatter

UTC (UNIX 時間に変換される) でのみサーバーに時刻を送信する必要があります。

ここに私がやっていることのいくつかのステップがあります:

  1. カレンダーから日付を選択すると、現在の時刻が追加され、UTC に変換されます。

  2. 選択した日付と現在の日付を比較します。選択した日付が過去の日付か未来の日付かを知るだけです。(過去/未来/現在の日付に基づいて実行される他の操作はほとんどありません)。

私はこのコードを試しました:

のカテゴリNSDate:

-(NSDate *) toLocalTime{
    NSDate* sourceDate = self;
    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

    NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
    NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
    NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

    NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];

    return destinationDate;
}

しかし、日付をローカルに変換しようとすると問題が発生します(現在の時刻がローカルタイムゾーンにあるかどうかわからない場合があります)。それらがUTCにある場合、上記の方法は正常に機能します。

時刻がすでにローカル タイムゾーンにある場合は、再び が追加され、interval間違った時刻が表示されます。

私はアイデアがありません、助けてください。

どんなアイデアでも高く評価されます。

4

1 に答える 1