4

私はdjango1.3プロジェクトを持っており、特定のスケジュールで実行されるテキスト通知を追加しているところです。そのため、アプリがタイムゾーンに対応している必要があります。django1.4はこれをかなりうまく処理しているようです。問題は、dbにSQLiteを使用していて、タイムゾーン情報が保存されていないため、変換する必要があることです。私はdjangoの初心者です。SQLliteの日時フィールドをタイムゾーン対応フィールドに変換する方法に関する提案。

ちなみに、django 1.4にアップグレードしてタイムゾーンのサポートを有効にした後でmanage.pyシェルを起動すると、次のメッセージが表示されます。

RuntimeWarning: SQLite received a naive datetime (2012-04-05 15:18:49.939725) while 
time zone support is active. RuntimeWarning)

ありがとう!

4

1 に答える 1

4

SQlite の日時フィールドをタイムゾーン対応フィールドに変換しません。SQlite 内では、日時はまだナイーブになりますが、UTC に変換されます。また、アプリケーション レベルで利用できるタイムゾーン対応の日時 ara もあります。

たとえば、Django の datetime フィールドを持つ SQlite から Model インスタンスをクエリすると、次のようになります。

  1. SQLite から単純な日時を取得し、UTC タイムゾーンを使用して日時を認識できるように設定します
  2. したがって、model_instance.datetime_field にアクセスすると、すでにタイムゾーンが認識され、UTC にローカライズされています。
  3. 次に、たとえばテンプレートで、現在のタイムゾーンにローカライズできます

編集:モデルインスタンスで得られるものについて、最初に間違った答えを修正しました。

現在、SQlite データベースの日時が UTC でない場合は、1 回限りの移行を行ってすべてを UTC に変換する必要があります。(そして、UTC とは単純な UTC 値を意味します。SQlite と MySQL には、タイムゾーン情報を格納する日時フィールドがありません)

タイムゾーン関連のドキュメントを非常に注意深く徹底的に読むことをお勧めします: https://docs.djangoproject.com/en/1.4/topics/i18n/timezones/

これを間違えるのはとても簡単です。

はいRunTimeWarning、コードが単純な日時を保存のためにDjangoに「与える」すべてのインスタンスを取得します。それらを徐々に修正し、タイムゾーン対応にする必要があります。

于 2012-04-05T21:51:28.147 に答える