0

RestKitを使用してデータをインポートしてCoreDataにマッピングしようとしています。

これがAPIからのデータです。

active": false,
"date": "2012-09-09",
"desc": "",
"end": "18:30",
"location": "",
"simStatus": "Accepted",
"start": "17:00",
"title": "The title"

これらをCoreDataにマップしようとすると、時間と日付が変更されることがあります。たとえば、Core Dataに保存されている上記のデータは、start = 1970-1-1 23:00、end = 1970-1-1 00:30になりますか?

APIが送信する時間は現地時間であり、APIはアプリがいつどこで使用されているかを認識しています。スポーツイベントを考えてみてください。アウェイゲームがいつどこにあるかを知っています。

これらの時刻と日付をCoreDataに保存する必要があります。これは、APIがそれらを渡す正確な時刻hh:mmです。Core DataまたはRestkitがそれらを変更することを決定した理由がわかりませんか?1970年の部分は、開始と終了に日付がないことを理解していますが、なぜ時間を変更するのですか?

誰かが解決策を知っていますか?

以下は、timeZone、timeZoneなし、local timeZone、UTCタイムゾーンなどで試したRestKitマッピングコードです。en_US_POSIXを使用した場合と使用しない場合も試しました。

NSDateFormatter* timeFormatter = [NSDateFormatter new];
[timeFormatter  setDateFormat:@"HH:mm"];
timeFormatter.timeZone = [NSTimeZone localTimeZone];
timeFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

NSDateFormatter* dateFormatter = [NSDateFormatter new];
[dateFormatter  setDateFormat:@"yyyy-MM-dd"];
dateFormatter.timeZone = [NSTimeZone localTimeZone];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
gameMapping.dateFormatters = [NSArray arrayWithObjects:dateFormatter, timeFormatter, nil ];

[gameMapping mapKeyPath:@"start"     toAttribute:@"start"];
[gameMapping mapKeyPath:@"end"       toAttribute:@"end"];
.......
4

1 に答える 1

1

Hot Licksが彼のコメントで指摘しているように、すべてのNSDateオブジェクトはUTCであるため、それらを印刷すると表示されます。デバイスのタイムゾーンで値を明示的に解析しているため、結果のUTC値を見るとシフトが見られます。

通常、タイムゾーンオフセットを含めて、完全な日付と時刻の値として送信することを強くお勧めします。(たとえば、"2012-09-09T18:30:00-05:00"。)関係する変数が多すぎて、すべてを明示することはできません。または、少なくともタイムゾーンを個別の(ただし明示的な)値として渡します。

サーバー側を制御できない場合(あなたがそうしないと言うように)、UTCであるかのように値を解析し、リスクが高く脆弱な状態で一致することを期待する回避策があります。それはあなたが持っている最良の選択肢かもしれないように聞こえます。

于 2012-08-23T15:36:41.850 に答える