2

テーブルから過去 n 時間の行を取得し、指定されたタイムゾーンで日時を印刷しようとしています。日付を UTC として返します。

ここに私の現在のコードがあります:

min_time = datetime.datetime.now(link.monitor.timezone) - datetime.timedelta(hours=period)

timezone.activate(link.monitor.timezone)
rows = TraceHttp.objects.values_list('time', 'elapsed').filter(time__gt=min_time,link_id=link_id,elapsed__gt=0)

array = []
for row in rows:
    array.append((row[0].astimezone(link.monitor.timezone),row[1]))

astimezone 関数の使用を避け、Django にこれを実行させたいのですが、アクティブ化関数について見逃していることがありますか?

編集

表示するタイムゾーンが「モニター」モデルに保存されていることがわかるように、これが私のモデルです。

class Link(models.Model):
   ...
   monitor = models.ForeignKey(Monitor)
   ...

class Monitor(models.Model):
    ...
    timezone = TimeZoneField(default='Europe/London')

class TraceHttp(models.Model):
    link = models.ForeignKey(Link)
    time = models.DateTimeField()
    elapsed = models.FloatField()
4

3 に答える 3

6

いくつかの調査の後、Django は常に日時を UTC として返すことに気付きました。datetime.astimezone(timezone) メソッドを使用するか、特定のタイムゾーンを有効にすることにより、正しいタイムゾーンでそれらを解釈するのはあなた次第です。

django アクティブ関数は、日時がテンプレートでレンダリングされる方法を変更するだけで、実際にはタイムゾーンをローカライズしません。

于 2015-10-29T02:57:40.097 に答える
0

Django.utils の now() 関数を使用できますが、設定で 2 つの変数を設定する必要があります。USE_TZ と TIME_ZONE。最初は true で、もう 1 つは日時の生成に使用されるデフォルトのタイムゾーンです。詳細については、django のドキュメントを参照してください

于 2015-10-20T22:35:06.183 に答える