34

DATETIMEシステム時間 (UTC) で格納されている mysql値があります。それをdjangoのローカルタイムゾーンに変換する必要があります。これが私が現在持っているものです:

# value in mysql
`timestamp`
2013-02-01 22:48:45

# settings.py
TIME_ZONE = 'America/Los_Angeles'

# views.py
last_updated = PathLastUpdated.objects.all()[0].timestamp
print last_updated
2013-02-01 22:48:45 <-- same as UTC

last_updated 値を自分のローカル タイムゾーン = "America/Los Angeles" にするにはどうすればよいですか?

4

9 に答える 9

41

タイムゾーンに関するDjango ドキュメントにdatetimeは、オブジェクトを適切なタイムゾーンに変換して表示するために必要なすべての詳細が記載されています。

あなたのデータはUTCで保存されています。データベースからフィールド オブジェクトを取得するDateTimeと、それはナイーブdatetime.datetimeオブジェクトになります。つまり、タイムゾーンが添付されていない日付/時刻。その後、変換を行うのはあなた次第です。

Web アプリケーションのユーザーは異なるタイム ゾーンにいる可能性があるため、リクエストごとに適切なタイム ゾーンに変換する必要があります。これが、現在のタイム ゾーンを設定するactivate関数がある理由です。

pytzがインストールされている場合は、次のことができるはずです。

from django.utils.timezone import activate
activate(settings.TIME_ZONE)

テンプレート エンジンの日付フィールドのすべての出力は、ナイーブな日付時刻オブジェクトを表示用の正しいタイム ゾーンに自動的に変換します。

datetime.datetimeタイムゾーンを設定したい単純なインスタンスが 1 つしかない場合は、pytzモジュールを直接使用してください。ただし、プレゼンテーションの時点でのみタイム ゾーンを変換することをお勧めします。

from pytz import timezone

settings_time_zone = timezone(settings.TIME_ZONE)
last_updated = last_updated.astimezone(settings_time_zone)
于 2013-02-02T11:21:24.807 に答える
18

localtimeはテンプレート フィルターです。これが役立つ場合があります。

https://github.com/django/django/blob/1.8.4/django/utils/timezone.py#L298

コードサンプル:

from django.utils.timezone import localtime 

desired_datetime = localtime(stored_datetime)
于 2015-09-19T09:25:38.290 に答える
7

これらすべてを処理するためのシンプルなミドルウェアを作成しました。

https://github.com/Miserlou/django-easy-timezones

インストールして指示に従うだけで完了です。

  1. django-easy-timezones をインストールする

    pip install django-easy-timezones pytz pygeoip
    
  2. 次のように、INSTALLED_APPS 設定に「easy-timezones」を追加します。

    INSTALLED_APPS = (
    ...
    'easy-timezones',
    )
    
  3. EasyTimezoneMiddleware を MIDDLEWARE_CLASSES に追加します

    MIDDLEWARE_CLASSES = (
    ...
    'easy-timezones.middleware.EasyTimezoneMiddleware',
    )
    
  4. 設定ファイルにMaxMind GeoIP データベースへのパスを追加します。

    GEOIP_DATABASE = '/path/to/your/geoip/database/GeoIP.dat'
    
  5. テンプレートで localtime を有効にします。

    {% load tz %}
        The UTC time is {{ object.date }}
    {% localtime on %}
        The local time is {{ object.date }}
    {% endlocaltime %}
    
  6. 多田!

于 2013-07-17T06:29:47.860 に答える
6

TIME_ZONE個人的には、UTC 以外の設定を使用しないようにアドバイスします。過去にこれに問題があったことを覚えています.Djangoバックエンドが使用していたものとは異なるタイムゾーンでデータベースが動作していた(異なるタイムゾーンで値を保存していた). これは、自分が何をしているかに応じて時間を前後に変更して、時間を比較するのに多くの手間がかかることを意味しました。

通常、バックエンドで 1 つのタイムゾーン (UTC としましょう) を使用し、フロントエンドの時刻を、サービスを提供しているユーザーのタイムゾーンに変換することをお勧めします。

于 2013-02-02T09:08:05.177 に答える
5

私は同じ問題に遭遇しました。私の設定では、を設定しましたTIME_ZONEが、MySql の時間はまだ UTC 時間です。

# settings.py
TIME_ZONE = 'Asia/Shanghai'

次に、settings.pyで、USE_TZFalseに設定されていることがわかりました

USE_TZ = False

@MagicLAMP で指摘されているように、単一のタイム ゾーンのサイトでのみ機能します。サイトが国際的な場合、またはサイトが使用されている場所で夏時間が発生している場合は、タイムゾーンを確認してください。

于 2016-09-23T06:41:58.860 に答える