0

Django のドキュメントでは、ナイーブな日時を使用してはならないことが明確に示されていますが、必要と思われる場所でかなり一般的であると思われるユースケースがあります。私のプロジェクトでは、タイムゾーンを超えてオブジェクトを照会する必要がある場合がありますが、現地時間に基づいています。

たとえば、これは不自然な例ですが、各ユーザーのローカル タイムゾーンに従って、特定の日の午後 4 時から午後 5 時の間にプロファイルを最後に更新したすべてのユーザーを検索したいとします。私は単にこれを次のように行うことができます:

qs = User.objects.filter(profile__datelastupdated__gte=datetime(2013,4,1,16))
qs = qs.filter(profile__datelastupdated__lte=datetime(2013,4,1,17))

ただし、タイムゾーンのサポートが有効になっているため、次の警告が表示されます。

RuntimeWarning: DateTimeField received a naive datetime (YYYY-MM-DD HH:MM:SS) while time zone support is active.

警告がスローされる理由を理解しているので、私の質問は次のとおりです。日時について正しい方法で考えていませんか? それが必要なときに tz 対応の日時の特異性を持ち、ナイーブな日時によって提供されることが時々必要とされる望ましい汎用性を持つ、Django の偶像的な方法はありますか?

4

1 に答える 1

0

日時 + タイムゾーンでデータベースをフィルタリングする必要があります。データベース内のすべての日付は常に utc として保存されます。タイムゾーンなしで日付を指定すると、djangoはデフォルトをutcのように扱い、警告を発します。
タイムゾーンをサポートする場合は、ユーザーのタイムゾーンを保存する必要があります。日付を入れるのと同じように、日付+現在のユーザーのタイムゾーンでデータベースに問い合わせます。

于 2013-04-08T18:34:43.700 に答える