Djangoでタイムゾーンを設定する方法は?


139

私のdjangoプロジェクトのsettings.pyファイルには、次の行があります:

TIME_ZONE = 'UTC'

しかし、アプリをUTC + 2タイムゾーンで実行したいので、次のように変更しました

TIME_ZONE = 'UTC+2'

エラーが発生しますValueError: Incorrect timezone setting: UTC+2。これを行う正しい方法は何ですか?

ありがとう!

回答:



28

tzデータベースからすべての有効なタイムゾーン名(ID)のセットを取得するには、Pythonでモジュールを使用pytzできます

>>> import pytz # $ pip install pytz
>>> pytz.all_timezones_set
LazySet({'Africa/Abidjan',
         'Africa/Accra',
         'Africa/Addis_Ababa',
         'Africa/Algiers',
         'Africa/Asmara',
         'Africa/Asmera',
         ...
         'UTC',
         'Universal',
         'W-SU',
         'WET',
         'Zulu'})

1
また、非推奨のタイムゾーンを含まないタイムゾーンの短いリストがあることにも注意してくださいpytz.common_timezones
vmonteco

11

tzinfoデータベースから有効なタイムゾーンを選択してください。彼らは、例えばAfrica/GaborneUS/Eastern

最寄りの都市に一致するもの、またはタイムゾーンを持つものを見つけて、の値TIME_ZONEを一致するように設定します。


4

有効なtimeZone値は、Linuxおよび他のUnixシステムで使用されるtz(タイムゾーン)データベースに基づいています。値は、「Area / Location」の形式の文字列(xsd:string)です

Areaは大陸または海の名前です。現在、次のエリアが含まれています:

  • アフリカ
  • アメリカ(北アメリカと南アメリカの両方)
  • 南極大陸
  • 北極
  • アジア
  • 大西洋
  • オーストラリア
  • ヨーロッパ
  • その他(管理ゾーン。たとえば、「Etc / UTC」は協定世界時を表します。)
  • インド人
  • パシフィック

ロケーションは、都市、島、またはその他の地域名です。

ゾーン名と出力省略形は、POSIX(ポータブルオペレーティングシステムインターフェイス)UNIXの規則に準拠しています。これは、グリニッジの西側に正(+)の記号を、グリニッジの東側に負(-)の記号を使用します。たとえば、「Etc / GMT + 4」は、UTC(グリニッジの東)より4時間進んでいるのではなく、UTC(グリニッジの西)より4時間遅れていることに対応しています。

ここにすべての有効なタイムゾーンのリストがあります

次のようにsettings.pyでタイムゾーンを変更できます

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Kolkata'

USE_I18N = True

USE_L10N = True

USE_TZ = True

2

私のDjangoプロジェクトのsettings.pyファイルのタイムゾーンをイギリスに変更しようとするこの質問を見つけました。

jfsのソリューションでtzデータベースを使用して、私は答えを見つけました:

    TIME_ZONE = 'Europe/London'

1
  1. TIME_ZONEをローカルタイムゾーンに変更し、「setting.py」でUSE_TZをTrueのままにします。

    TIME_ZONE = 'アジア/上海'

    USE_I18N =真

    USE_L10N = True

    USE_TZ = True

  2. これにより、datetimeオブジェクトがUTCとしてバックエンドデータベースに書き込まれ、保存されます。

  3. 次に、テンプレートタグを使用して、フロントエンドテンプレートのUTC時間を次のように変換します。

                <td> 
                    {% load tz %}
                    {% get_current_timezone as tz %}
                    {% timezone tz %}
                        {{ message.log_date | time:'H:i:s' }}
                    {% endtimezone %} 
                </td>

または、テンプレートフィルターを簡潔に使用します。

                <td> 
                    {% load tz %}
                    {{ message.log_date | localtime | time:'H:i:s' }}
                </td>
  1. 詳細は公式ドキュメントで確認できます:デフォルトのタイムゾーンと現在のタイムゾーン

    タイムゾーンのサポートが有効になっている場合、Djangoは日時情報をデータベースのUTCに格納し、タイムゾーン対応の日時オブジェクトを内部で使用して、テンプレートとフォームでエンドユーザーのタイムゾーンに変換します。


1

DjangoのTZ名のサポートに基づくユニバーサルソリューション:

UTC-2 = 'Etc/GMT+2'
UTC-1 = 'Etc/GMT+1'
UTC = 'Etc/GMT+0'
UTC+1 = 'Etc/GMT-1'
UTC+2 = 'Etc/GMT-2'

+/-は意図的に切り替えられます。


0
  1. 最新のpytzファイル(pytz-2019.3.tar.gz)を以下からダウンロードします。

    https://pypi.org/simple/pytz/
  2. site_packagesyorプロジェクトのディレクトリにそれをコピーして抽出します

  3. cmdで、抽出されたフォルダーに移動して実行します。

    python setup.py install
  4. TIME_ZONE = 'Etc/GMT+2' または国名

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.