2009-06-19 22 views
1

私のiPhoneアプリから、CURRENT_TIMESTAMPデフォルト値を使って日付を含むデータをsqliteデータベースに挿入します。すべてのことは、時間が1時間遅れるという事実を除いて素晴らしいものです。そして、それはデバイスとシミュレータの両方で発生します。 sqliteの設定(現在の時刻など)はどこかにアクセスできますか?iPhoneのSQLiteタイムスタンプの時間が間違っています

あなたは、私がそのために使用していたコードを見たい場合は、この投稿への私の答えを見てみることができます:sqlite datetime data type with iphone NSdate?

+0

夏時間の問題のような音 – teabot

答えて

2

SQLiteの間の日光・セービング・タイムゾーンの矛盾があるかもしれないかのようですねとNSDateFormatterが使用している時間帯。それはlooks as though SQLite stores the datetime in GMTです。したがって、NSDateFormatterもGMTに設定されていることを確認する必要があります。あなたはNSDateのインスタンスを持っていたら、私はあなたが、たとえば設定されているNSDateFormatterインスタンスを使用して、正しい現地時間を示すことの文字列バージョンを取得することができることを期待

gmtFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[gmtFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"] 

:あなたがこれを行うことができているかのようにそれが表示されます。ローカル/システムのタイムゾーンを使用します。

注:私は実際にこれを試していません。

+0

私はこれを試しても違いはありません。また、それは相対的なものでなければならないので、私はそれをGMT + 1に設定し、誰かが中国でプレーしている場合、間違ったタイムスタンプを取得したくない... – Dimitris

+0

GMT + 1に設定することを提案していません。 SQLiteのすべてのタイムスタンプはGMTに固定されているようですので、あなたが記述するNSDateFormatterも同じタイムゾーン(GMT)に同期させる必要があります。フォーマッタから派生したNSDateは、タイムゾーンに依存せず、GMT + 1または北京のような他のタイムゾーンに変換可能でなければなりません。 – teabot

0

O/S 3.0で利用可能なコアデータを使用することを検討することをお勧めします。タイムゾーンなどを指定せずにこのような処理を自動的に行います。

他にも多くの利点がありますが、これは関連性が高いようです。

+0

チップをありがとう、しかし、アプリはすでに作られて以来、私はそれを変更することを嫌っていた。私は次の1つを念頭に置いておきます:) – Dimitris

-1

この1時間の差がどこにあるのか分からないので、次の方法で日付を修正しました。それは適切な解決策ではありませんが、私は必要なものを正確に行います。したがって、それは正しい作り、ちょうど日時に1時間の遅延を追加して

NSDate *date = [[NSDate alloc] initWithTimeInterval:3600 sinceDate:[formatter dateFromString:score.datetime]]; 

:場合には他の誰かが私と同じ問題に実行されます..だからここに私の修正です。

+0

これはこの問題を解決する正しい方法ではなく、ユーザーが異なるタイムゾーンにいるときに問題を引き起こします。 – Darren

0

私はあなたがより良いteabotの提案を実装すると思います。 1つのタイムゾーンが冬と1つの時間帯を持っているときに問題が発生します。

+0

私は彼の提案を元に戻すことを覚えていますが、それはうまくいきませんでした...人々がティーボの方法がうまくいくことに同意すれば、私は彼の答えを正しいものとして受け入れて他者を助けるでしょう。私はまた時間を取ったときに私も自分自身を再び実装しようとします。 – Dimitris

0

私もこの問題を解決しなければならず、ティーポットの答えは正しいものです。 sqliteで作成されたタイムスタンプはGMT形式なので、データベースから読み込むときには、日付フォーマッタにGMT形式でも読む必要があります。結果のNSDateは、あなたがいるタイムゾーンに関係なく、正しい日付になります。 1時間を追加することによって、あなたが修正したと言う方法は、結局あなたに失敗します。 GMTタイムゾーンでアプリを使用しているユーザーは、すべて+1時間表示されます。他のタイムゾーンの誰でも、完全に異なるタイムオフセットが表示されます。 (私はこれが歳であることを知っていますが、それはちょうど私を助けました)。

関連する問題