2

これが私のdjangoプロジェクトのsettings.pyにある2つの関連する設定です。

USE_TZ = True
TIME_ZONE = 'Europe/Stockholm'

モデルでこのように定義されたDateTimeFieldがあります。

triggeredTime = models.DateTimeField('Utlöses')

これは、Django管理アプリとフォームによって管理されます。そのため、このフォームでは、データベースのこのフィールドに日付と時刻を入力できます。この場合のDBはsqlite3です。

(スパム防止として画像を投稿することは許可されていなかったので、ここにリンクとして掲載しています) http://i.imgur.com/ukadP.png

例として、私が入力する時間は14:10:05です。

次に、djangoシェルを起動します。

$ python manage.py shell
Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from scheduler.models import Task, Schedule
>>> s = Schedule.objects.all()
>>> for row in s:
...  print row.triggeredTime
... 
2012-09-11 12:10:05

これは明らかにUTCです。ミックスにpytzを追加して、tzinfoを設定しようとしても、DSTにない値が取得されます。DSTをコードにハードコーディングする必要はありません。

>>> import pytz
>>> from pytz import timezone
>>> stockholm = timezone('Europe/Stockholm')
>>> for row in s:
...  print row.triggeredTime.replace(tzinfo=stockholm)
... 
2012-09-11 12:10:05+01:00

さらに言えば、djangoはタイムゾーンをカバーしていると主張しているので、タイムゾーンをハードコーディングする必要はありません。では、誰かがDjangoでタイムゾーンを使用する方法を説明できますか?

参考までに、サーバーは物理的にCETタイムゾーンに配置されているため、ヨーロッパ/ストックホルムが現在のシステム全体の設定です。

4

1 に答える 1

0

SQLiteは TZ 情報を保存しないため、DB に保存するときに日付を UTC に変換するか、USE_TZ を False に設定するか、Postgre に変更する必要があります

于 2012-09-11T23:12:23.400 に答える