0

サーバーからブログ投稿を取得すると、サーバーは次の時間を JSON 経由で iOS アプリに送信します

"createdAt": "2013-05-11 05:54:07.589698"

しかし、PostsViewController で画面に出力すると、午前 5 時 54 分 (現地時間の 4 時間前) と表示されます。

しかし、投稿を作成すると、PostsViewController は午前 1 時 54 分 (正しい) のような時刻を表示します。

そこで私は調査に行き、SQLite をチェックして、2001 形式の日付の秒数を GMT モードに変換しました。そして、サーバーからの投稿は、本来あるべきものよりも実際には 4 時間進んでいます。

基本的に、すべての NSDate が Core Data で GMT に設定されているわけではなく、サーバーからの投稿は何らかの理由で GMT+4 に設定されています。

現在、GMT から 4 時間遅れていることに注意してください。

すべてのサーバー時間は、1 つの時間形式 (GMT) で問題ありません

現在、Peter Hosey の ISO8601DateFormatter を使用しています https://github.com/boredzo/iso-8601-date-formatter :

post.createdDate = [formatter dateFromString:[post_info objectForKey:@"createdAt"]];

では、この時差の二重オフセットを止めるにはどうすればよいでしょうか。

4

3 に答える 3

2

時間が GMT であることがわかっている場合は、timeZone を dateFormatter に設定するだけです。

NSString *dateString = @"2013-05-11 05:54:07.589698";

NSDateFormatter *dateFormatter = [NSDateFormatter new];
NSLocale *locale = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:locale];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSSSS"];

NSDate *date = [dateFormatter dateFromString:dateString];

//Time zone changed to your local  
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
//Set a new dateFormat if you want 

NSLog(@"%@",[dateFormatter stringFromDate:date]);
于 2013-05-11T07:29:33.957 に答える
1

使用するタイムゾーンをフォーマットされた日付に伝える必要があります。そうしないと、デバイスのタイムゾーンが使用されます。

于 2013-05-11T07:08:57.243 に答える
0

私はカスタム日付フォーマッタを使用していたので、これらの提案は私を正しい軌道に乗せました (そしてアイデアは正しかった) が、このライブラリの実装は少し異なります。

文字列の最後に「Z」を追加したところ、うまくいきました。Z は、UTC タイムゾーンであることを示します。

他の誰かが同じ問題を抱えていて、ISO8601DateFormatter ライブラリを使用している場合に備えて、この回答を追加すると思いました。

于 2013-05-11T16:41:58.120 に答える