{"title":"タイムゾーン","version":"4.0","locale":"ja","docname":"topics/i18n/timezones","url":"/ja/4.0/topics/i18n/timezones/","canonical":"https://djangodocs.dev/ja/4.0/topics/i18n/timezones/","summary":"概要 Link to this heading # タイムゾーンのサポートが有効のとき、Django は内部的に aware なタイムゾーンオブジェクトを使用して、データベース内に UTC で日時の情報を保持します。そして、テンプレートやフォーム内でエンドユーザのタイムゾーンに変換します。…","html":"<h1>タイムゾーン<a class=\"heading-anchor\" href=\"#time-zones\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"overview\">\n<span id=\"time-zones-overview\"></span><h2>概要<a class=\"heading-anchor\" href=\"#overview\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>タイムゾーンのサポートが有効のとき、Django は内部的に aware なタイムゾーンオブジェクトを使用して、データベース内に UTC で日時の情報を保持します。そして、テンプレートやフォーム内でエンドユーザのタイムゾーンに変換します。</p>\n<p>この機能は、ユーザが複数のタイムゾーンを使用しており、またユーザに対して彼らの時計と同じ日時を表示したいときに有用です。</p>\n<p>Even if your website is available in only one time zone, it's still good\npractice to store data in UTC in your database. The main reason is daylight\nsaving time (DST). Many countries have a system of DST, where clocks are moved\nforward in spring and backward in autumn. If you're working in local time,\nyou're likely to encounter errors twice a year, when the transitions happen.\nThis probably doesn't matter for your blog, but it's a problem if you over bill\nor under bill your customers by one hour, twice a year, every year. The\nsolution to this problem is to use UTC in the code and use local time only when\ninteracting with end users.</p>\n<p>Time zone support is disabled by default. To enable it, set <a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span>\n<span class=\"pre\">True</span></code></a> in your settings file.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>In Django 5.0, time zone support will be enabled by default.</p>\n</aside>\n<p>Time zone support uses <a class=\"reference external\" href=\"https://docs.python.org/3/library/zoneinfo.html#module-zoneinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">zoneinfo</span></code></a>, which is part of the Python standard\nlibrary from Python 3.9.  The <code class=\"docutils literal notranslate\"><span class=\"pre\">backports.zoneinfo</span></code> package is automatically\ninstalled alongside Django if you are using Python 3.8.</p>\n<aside class=\"version-note version-changed\" data-version=\"3.2\">\n<p class=\"version-note-title\">Changed in Django 3.2</p><p>Support for non-<code class=\"docutils literal notranslate\"><span class=\"pre\">pytz</span></code> timezone implementations was added.</p>\n</aside>\n<aside class=\"version-note version-changed\" data-version=\"4.0\">\n<p class=\"version-note-title\">Changed in Django 4.0</p><p><a class=\"reference external\" href=\"https://docs.python.org/3/library/zoneinfo.html#module-zoneinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">zoneinfo</span></code></a> was made the default timezone implementation. You may\ncontinue to use <a class=\"reference external\" href=\"http://pytz.sourceforge.net/\">pytz</a> during the 4.x release cycle via the\n<a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_DEPRECATED_PYTZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_DEPRECATED_PYTZ</span></code></a> setting.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><a class=\"reference internal\" href=\"/ja/4.0/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">django-admin</span> <span class=\"pre\">startproject</span></code></a> によって生成されるデフォルトの <code class=\"file docutils literal notranslate\"><span class=\"pre\">settings.py</span></code> ファイル は、利便性のために <a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code></a> を含んでいます。</p>\n</aside>\n<p>特定の問題と格闘している場合は、<a class=\"reference internal\" href=\"#time-zones-faq\"><span class=\"std std-ref\">time zone FAQ</span></a> を参照してください。</p>\n</section>\n<section id=\"concepts\">\n<h2>コンセプト<a class=\"heading-anchor\" href=\"#concepts\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"naive-and-aware-datetime-objects\">\n<span id=\"naive-vs-aware-datetimes\"></span><h3>native と aware の日時オブジェクト<a class=\"heading-anchor\" href=\"#naive-and-aware-datetime-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Python の <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.datetime</span></code></a> のオブジェクトには、タイムゾーン情報を保持するために使える <code class=\"docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code> 属性があり、これは <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.tzinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.tzinfo</span></code></a> のサブクラスのインスタンスで表されます。 この属性がセットされオフセットを示すとき、datetime オブジェクトは <strong>aware</strong> となります。それ以外の場合は <strong>naive</strong> となります。</p>\n<p><a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.is_aware\" title=\"django.utils.timezone.is_aware\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">is_aware()</span></code></a>  <a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.is_naive\" title=\"django.utils.timezone.is_naive\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">is_naive()</span></code></a> を使って、datatime を aware にするか native にするかを決めることもできます。</p>\n<p>When time zone support is disabled, Django uses naive datetime objects in local\ntime. This is sufficient for many use cases. In this mode, to obtain the\ncurrent time, you would write:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">datetime</span>\n\n<span class=\"n\">now</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>タイムゾーンサポートが有効化 (<a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ=True</span></code></a> ) されているときは、Django は タイムゾーンを認識する (awareな) datetime オブジェクトを使用します。コード内で datetime オブジェクトを作成した場合も、aware となります。このモードでは、上の例は以下のようになります:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n\n<span class=\"n\">now</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n</code></pre></div>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>Dealing with aware datetime objects isn't always intuitive. For instance,\nthe <code class=\"docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code> argument of the standard datetime constructor doesn't work\nreliably for time zones with DST. Using UTC is generally safe; if you're\nusing other time zones, you should review the <a class=\"reference external\" href=\"https://docs.python.org/3/library/zoneinfo.html#module-zoneinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">zoneinfo</span></code></a>\ndocumentation carefully.</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Python の <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.time\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.time</span></code></a> オブジェクトは、<code class=\"docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code> 属性を持ちます。また PostgreSQL には、これに相当する <code class=\"docutils literal notranslate\"><span class=\"pre\">time</span> <span class=\"pre\">with</span> <span class=\"pre\">time</span> <span class=\"pre\">zone</span></code> タイプがあります。ただし、PostgreSQL のドキュメントにあるとおり、このタイプは &quot;不確かな有用性に導く特性を示しています&quot;。</p>\n<p>Django は naive な time オブジェクトのみをサポートしており、aware な time オブジェクトを保存しようとすると例外を投げます。これは、日付を伴わない時刻に対するタイムゾーンには意味がないからです。</p>\n</aside>\n</section>\n<section id=\"interpretation-of-naive-datetime-objects\">\n<span id=\"naive-datetime-objects\"></span><h3>native な datetime オブジェクトの変換<a class=\"heading-anchor\" href=\"#interpretation-of-naive-datetime-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>後方互換性を維持するため、 <a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> のときでも、Django は naive な datetime オブジェクトを受け入れます。データベースレイヤがこれを受け取ったとき、 <a class=\"reference internal\" href=\"#default-current-time-zone\"><span class=\"std std-ref\">default time zone</span></a> で変換して aware に直そうとし、警告を投げます。</p>\n<p>Unfortunately, during DST transitions, some datetimes don't exist or are\nambiguous. That's why you should always create aware datetime objects when time\nzone support is enabled. (See the <a class=\"reference external\" href=\"https://docs.python.org/3/library/zoneinfo.html#module-zoneinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">Using</span> <span class=\"pre\">ZoneInfo</span> <span class=\"pre\">section</span> <span class=\"pre\">of</span> <span class=\"pre\">the</span> <span class=\"pre\">zoneinfo</span>\n<span class=\"pre\">docs</span></code></a> for examples using the <code class=\"docutils literal notranslate\"><span class=\"pre\">fold</span></code> attribute to specify the\noffset that should apply to a datetime during a DST transition.)</p>\n<p>実際には、これはめったに問題になりません。Django はモデルやーフォームでは aware な datetime オブジェクトを渡し、ほとんどの場合、新しい datetime オブジェクトは <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">timedelta</span></code></a> 計算を通じて他の日時から作成されます。唯一アプリケーションのコード内でよく作成される datetime は現在の時刻で、<a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">timezone.now()</span></code></a> は自動的に適切な処理を行います。</p>\n</section>\n<section id=\"default-time-zone-and-current-time-zone\">\n<span id=\"default-current-time-zone\"></span><h3>デフォルトタイムゾーンとカレントタイムゾーン<a class=\"heading-anchor\" href=\"#default-time-zone-and-current-time-zone\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><strong>デフォルトタイムゾーン</strong> は、<a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></code></a> 設定によって定義されるタイムゾーンです。</p>\n<p><strong>カレントタイムゾーン</strong> は、レンダリングに使われるタイムゾーンです。</p>\n<p><a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.activate\" title=\"django.utils.timezone.activate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">activate()</span></code></a> を使って、エンドユーザの実際のタイムゾーンに対するカレントタイムゾーンをセットする必要があります。 そうしないと、デフォルトタイムゾーンが使用されます。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></code></a> のドキュメントで説明されているとおり、Django は環境変数をセットし、プロセスがデフォルトタイムゾーンで動くようにします。 これは、<a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> やカレントタイムゾーンの値にかかわらず発生します。</p>\n<p><a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> のとき、これは現地時刻に未だ依存しているアプリケーションでの後方互換性を維持するために役立ちます。ただし、<a class=\"reference internal\" href=\"#naive-datetime-objects\"><span class=\"std std-ref\">上記で説明したとおり</span></a>、これは完全には信用できません。そして、常に コード内では UTC で aware な datetimes を扱う必要があります。、<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime.fromtimestamp\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">fromtimestamp()</span></code></a> を使って、<code class=\"docutils literal notranslate\"><span class=\"pre\">tz</span></code> パラメータを <a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.utc\" title=\"django.utils.timezone.utc\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">utc</span></code></a> にセットしてください。</p>\n</aside>\n</section>\n<section id=\"selecting-the-current-time-zone\">\n<h3>カレントタイムゾーンを選択する<a class=\"heading-anchor\" href=\"#selecting-the-current-time-zone\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>カレントタイムゾーンは、翻訳に対する <a class=\"reference internal\" href=\"/ja/4.0/topics/i18n/#term-locale-name\"><span class=\"xref std std-term\">locale</span></a> に相当します。ただし、Django がユーザのタイムゾーンを自動的に決めるために使える <code class=\"docutils literal notranslate\"><span class=\"pre\">Accept-Language</span></code> HTTP ヘッダに相当するものはありません。代わりに、Django は <a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#time-zone-selection-functions\"><span class=\"std std-ref\">タイムゾーン選択関数</span></a> を提供しています。これらを使って、あなたにとって有用なタイムゾーン選択ロジックを組み立ててください。</p>\n<p>Most websites that care about time zones ask users in which time zone they live\nand store this information in the user's profile. For anonymous users, they use\nthe time zone of their primary audience or UTC.\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/zoneinfo.html#zoneinfo.available_timezones\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">zoneinfo.available_timezones()</span></code></a> provides a set of available timezones that\nyou can use to build a map from likely locations to time zones.</p>\n<p>以下は、セッション内にカレントタイムゾーンを保持する例です。(シンプルにするため、全体的にエラー処理を省略しています。)</p>\n<p>以下のミドルウェアを <a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> に追加します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">zoneinfo</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TimezoneMiddleware</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">get_response</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_response</span> <span class=\"o\">=</span> <span class=\"n\">get_response</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__call__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">):</span>\n        <span class=\"n\">tzname</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;django_timezone&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tzname</span><span class=\"p\">:</span>\n            <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"n\">zoneinfo</span><span class=\"o\">.</span><span class=\"n\">ZoneInfo</span><span class=\"p\">(</span><span class=\"n\">tzname</span><span class=\"p\">))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">deactivate</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_response</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>カレントタイムゾーンをセットできるビューを作成します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">redirect</span><span class=\"p\">,</span> <span class=\"n\">render</span>\n\n<span class=\"c1\"># Prepare a map of common locations to timezone choices you wish to offer.</span>\n<span class=\"n\">common_timezones</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;London&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Europe/London&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;Paris&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Europe/Paris&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;New York&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;America/New_York&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">set_timezone</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s1\">&#39;django_timezone&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">[</span><span class=\"s1\">&#39;timezone&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;/&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;template.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;timezones&#39;</span><span class=\"p\">:</span> <span class=\"n\">common_timezones</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>このビューに <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code> するフォームを <code class=\"docutils literal notranslate\"><span class=\"pre\">template.html</span></code> に入れます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">tz</span> <span class=\"cp\">%}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">get_current_timezone</span> <span class=\"k\">as</span> <span class=\"nv\">TIME_ZONE</span> <span class=\"cp\">%}</span>\n<span class=\"p\">&lt;</span><span class=\"nt\">form</span> <span class=\"na\">action</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">url</span> <span class=\"s1\">&#39;set_timezone&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span> <span class=\"na\">method</span><span class=\"o\">=</span><span class=\"s\">&quot;POST&quot;</span><span class=\"p\">&gt;</span>\n    <span class=\"cp\">{%</span> <span class=\"k\">csrf_token</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">label</span> <span class=\"na\">for</span><span class=\"o\">=</span><span class=\"s\">&quot;timezone&quot;</span><span class=\"p\">&gt;</span>Time zone:<span class=\"p\">&lt;/</span><span class=\"nt\">label</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">select</span> <span class=\"na\">name</span><span class=\"o\">=</span><span class=\"s\">&quot;timezone&quot;</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">for</span> <span class=\"nv\">city</span><span class=\"o\">,</span> <span class=\"nv\">tz</span> <span class=\"k\">in</span> <span class=\"nv\">timezones</span> <span class=\"cp\">%}</span>\n        <span class=\"p\">&lt;</span><span class=\"nt\">option</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">tz</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">if</span> <span class=\"nv\">tz</span> <span class=\"o\">==</span> <span class=\"nv\">TIME_ZONE</span> <span class=\"cp\">%}</span> <span class=\"na\">selected</span><span class=\"cp\">{%</span> <span class=\"k\">endif</span> <span class=\"cp\">%}</span><span class=\"p\">&gt;</span><span class=\"cp\">{{</span> <span class=\"nv\">city</span> <span class=\"cp\">}}</span><span class=\"p\">&lt;/</span><span class=\"nt\">option</span><span class=\"p\">&gt;</span>\n        <span class=\"cp\">{%</span> <span class=\"k\">endfor</span> <span class=\"cp\">%}</span>\n    <span class=\"p\">&lt;/</span><span class=\"nt\">select</span><span class=\"p\">&gt;</span>\n    <span class=\"p\">&lt;</span><span class=\"nt\">input</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;submit&quot;</span> <span class=\"na\">value</span><span class=\"o\">=</span><span class=\"s\">&quot;Set&quot;</span><span class=\"p\">&gt;</span>\n<span class=\"p\">&lt;/</span><span class=\"nt\">form</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"time-zone-aware-input-in-forms\">\n<span id=\"time-zones-in-forms\"></span><h2>フォームでのタイムゾーン aware な入力<a class=\"heading-anchor\" href=\"#time-zone-aware-input-in-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>タイムゾーンサポートを有効にしたとき、Django はフォーム内に入力された日時を <a class=\"reference internal\" href=\"#default-current-time-zone\"><span class=\"std std-ref\">カレントタイムゾーン</span></a> で変換し、<code class=\"docutils literal notranslate\"><span class=\"pre\">cleaned_data</span></code> 内で aware な datetime オブジェクトを返します。</p>\n<p>Converted datetimes that don't exist or are ambiguous because they fall in a\nDST transition will be reported as invalid values.</p>\n</section>\n<section id=\"time-zone-aware-output-in-templates\">\n<span id=\"time-zones-in-templates\"></span><h2>テンプレートでのタイムゾーン aware な出力<a class=\"heading-anchor\" href=\"#time-zone-aware-output-in-templates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>タイムゾーンサポートを有効にしているとき、Django はテンプレートでレンダリングする際に aware な datetime オブジェクトを <a class=\"reference internal\" href=\"#default-current-time-zone\"><span class=\"std std-ref\">カレントタイムゾーン</span></a> に連関します。この動作は、 <a class=\"reference internal\" href=\"/ja/4.0/topics/i18n/formatting/\"><span class=\"doc\">表示形式のローカル化</span></a> と非常によく似ています。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">警告</p>\n<p>Django は naive な日時オブジェクトは転換しません。これは、曖昧であることと、タイムゾーンサポートが有効化されているときは naive な日時を生成するべきではないからです。ただし、後述するテンプレートフィルタを使って強制的に転換させることができます。</p>\n</aside>\n<p>現地時刻への転換は、適切ではないことがあります -- 人手はなくコンピュータに対してアウトプットを生成するときなどです。以下のフィルタやタグ (<code class=\"docutils literal notranslate\"><span class=\"pre\">tz</span></code> テンプレートタグライブラリによって提供されています) で、タイムゾーンの転換をコントロールできます。</p>\n<section id=\"template-tags\">\n<h3>テンプレートタグ<a class=\"heading-anchor\" href=\"#template-tags\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"localtime\">\n<span id=\"std-templatetag-localtime\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">localtime</span></code><a class=\"heading-anchor\" href=\"#localtime\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>ブロック内で、aware な datetime オブジェクトのカレントライムゾーンへの転換を有効化または無効化します。</p>\n<p>このタグは、テンプレートエンジンに関する限り、<a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> 設定とまったく同じ効果を持ちます。これを使うと、より細かい粒度の転換をコントロールできます。</p>\n<p>テンプレートブロックに対して転換を有効化ないし無効化するには、以下を使ってください:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">tz</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">localtime</span> <span class=\"nv\">on</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">value</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endlocaltime</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">localtime</span> <span class=\"nv\">off</span> <span class=\"cp\">%}</span>\n    <span class=\"cp\">{{</span> <span class=\"nv\">value</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endlocaltime</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p><a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> の値は、<code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">localtime</span> <span class=\"pre\">%}</span></code> ブロックの中では尊重されません。</p>\n</aside>\n</section>\n<section id=\"timezone\">\n<span id=\"std-templatetag-timezone\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">timezone</span></code><a class=\"heading-anchor\" href=\"#timezone\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>ブロック内でカレントタイムゾーンをセットまたは解除します。カレントタイムゾーンがセットされていないときは、デフォルトタイムゾーンが適用されます。</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">tz</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">timezone</span> <span class=\"s2\">&quot;Europe/Paris&quot;</span> <span class=\"cp\">%}</span>\n    Paris time: <span class=\"cp\">{{</span> <span class=\"nv\">value</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endtimezone</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{%</span> <span class=\"k\">timezone</span> <span class=\"kp\">None</span> <span class=\"cp\">%}</span>\n    Server time: <span class=\"cp\">{{</span> <span class=\"nv\">value</span> <span class=\"cp\">}}</span>\n<span class=\"cp\">{%</span> <span class=\"k\">endtimezone</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n</section>\n<section id=\"get-current-timezone\">\n<span id=\"std-templatetag-get_current_timezone\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">get_current_timezone</span></code><a class=\"heading-anchor\" href=\"#get-current-timezone\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">get_current_timezone</span></code> タグを使って、カレントタイムゾーンの名前を取得することができます:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">get_current_timezone</span> <span class=\"k\">as</span> <span class=\"nv\">TIME_ZONE</span> <span class=\"cp\">%}</span>\n</code></pre></div>\n<p>これ以外に、<a class=\"reference internal\" href=\"/ja/4.0/ref/templates/api/#django.template.context_processors.tz\" title=\"django.template.context_processors.tz\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">tz()</span></code></a> コンテキストプロセッサを有効化して <code class=\"docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></code> コンテキスト変数を使うことができます。</p>\n</section>\n</section>\n<section id=\"template-filters\">\n<h3>テンプレートフィルタ<a class=\"heading-anchor\" href=\"#template-filters\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>以下のフィルタは、aware と native の日時の両表を受け入れます。転換するために、これらは native な日時はデフォルトタイムゾーンにあると仮定します。これらは常に aware な日時を返します。</p>\n<section id=\"std-templatefilter-localtime\">\n<span id=\"id1\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">localtime</span></code><a class=\"heading-anchor\" href=\"#std-templatefilter-localtime\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>単一の値からカレントタイムゾーンへの変換を強制します。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">tz</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{{</span> <span class=\"nv\">value</span><span class=\"o\">|</span><span class=\"nf\">localtime</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n</section>\n<section id=\"utc\">\n<span id=\"std-templatefilter-utc\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">utc</span></code><a class=\"heading-anchor\" href=\"#utc\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>単一の値から UTC への転換を強制します。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">tz</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{{</span> <span class=\"nv\">value</span><span class=\"o\">|</span><span class=\"nf\">utc</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n</section>\n<section id=\"std-templatefilter-timezone\">\n<span id=\"id2\"></span><h4><code class=\"docutils literal notranslate\"><span class=\"pre\">timezone</span></code><a class=\"heading-anchor\" href=\"#std-templatefilter-timezone\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>単一の値から指定したタイムゾーンへの転換を強制します。</p>\n<p>引数は <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.tzinfo\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">tzinfo</span></code></a> サブクラスのインスタンスか、タイムゾーンの名前である必要があります。</p>\n<p>例:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Django template code\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">tz</span> <span class=\"cp\">%}</span>\n\n<span class=\"cp\">{{</span> <span class=\"nv\">value</span><span class=\"o\">|</span><span class=\"nf\">timezone</span><span class=\"s2\">:&quot;Europe/Paris&quot;</span> <span class=\"cp\">}}</span>\n</code></pre></div>\n</section>\n</section>\n</section>\n<section id=\"migration-guide\">\n<span id=\"time-zones-migration-guide\"></span><h2>移行ガイド<a class=\"heading-anchor\" href=\"#migration-guide\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>以下は、Django がタイムゾーンをサポートする以前に開始したプロジェクトを移行する方法です。</p>\n<section id=\"database\">\n<h3>データベース<a class=\"heading-anchor\" href=\"#database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"postgresql\">\n<h4>PostgreSQL<a class=\"heading-anchor\" href=\"#postgresql\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>The PostgreSQL backend stores datetimes as <code class=\"docutils literal notranslate\"><span class=\"pre\">timestamp</span> <span class=\"pre\">with</span> <span class=\"pre\">time</span> <span class=\"pre\">zone</span></code>. In\npractice, this means it converts datetimes from the connection's time zone to\nUTC on storage, and from UTC to the connection's time zone on retrieval.</p>\n<p>その結果、PostgreSQLを使用している場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code> を自由に切り替えることができます。データベース接続のタイムゾーンは、それぞれ <a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></code></a> または <code class=\"docutils literal notranslate\"><span class=\"pre\">UTC</span></code>  に設定されるため、Django はすべての場合に正しい日時を取得します。データ変換を実行する必要はありません。</p>\n</section>\n<section id=\"other-databases\">\n<h4>他のデータベース<a class=\"heading-anchor\" href=\"#other-databases\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>他のバックエンドは、タイムゾーン情報なしで日時を保持します。<code class=\"docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code> に切り替えた場合、現地時刻から UTC に転換する必要があります -- あなたの現地時刻に DST がある場合、これは確実に 1 つに決まるわけではありません。</p>\n</section>\n</section>\n<section id=\"code\">\n<h3>コード<a class=\"heading-anchor\" href=\"#code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>最初のステップは、設定ファイルに <a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code></a> を追加することです。この時点では、だいたいのことがうまく動くはずです。コード内で naive datetime objects が生成している場合、Django は必要に応じて aware にします。</p>\n<p>ただし、これらの変換ではDSTの移行が失敗する可能性があります。これは、まだ対ー無ゾーンサポートの利点が完全には得られていないことを意味します。 また、naive な日時と aware な日時を比較することは不可能なため、いくつかの問題に遭遇する可能性があります。 Django はaware な日時を提供するので、モデルやフォームから来た datetime と、コード内に作成した naive な datetime を比較すると例外が発生します。</p>\n<p>したがって、第2のステップは、datetime オブジェクトをインスタンス化している部分を aware に変更するため、コードをリファクタリングすることです。 これは段階的に行うことができます。<a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#module-django.utils.timezone\" title=\"django.utils.timezone: Timezone support.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.utils.timezone</span></code></a> は、互換性のための便利なヘルパーをいくつ定義しています <a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">now()</span></code></a>、<a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.is_aware\" title=\"django.utils.timezone.is_aware\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">is_aware()</span></code></a>、<a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.is_naive\" title=\"django.utils.timezone.is_naive\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">is_naive()</span></code></a>、<a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.make_aware\" title=\"django.utils.timezone.make_aware\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">make_aware()</span></code></a> そして <a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.make_naive\" title=\"django.utils.timezone.make_naive\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">make_naive()</span></code></a> です。</p>\n<p>最後に、アップグレードが必要なコードを特定しやすいように、naive な日時をデータベースに保存しようとすると、Django は警告を出します:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"ne\">RuntimeWarning</span><span class=\"p\">:</span> <span class=\"n\">DateTimeField</span> <span class=\"n\">ModelName</span><span class=\"o\">.</span><span class=\"n\">field_name</span> <span class=\"n\">received</span> <span class=\"n\">a</span> <span class=\"n\">naive</span>\n<span class=\"n\">datetime</span> <span class=\"p\">(</span><span class=\"mi\">2012</span><span class=\"o\">-</span><span class=\"mi\">01</span><span class=\"o\">-</span><span class=\"mi\">01</span> <span class=\"mi\">00</span><span class=\"p\">:</span><span class=\"mi\">00</span><span class=\"p\">:</span><span class=\"mi\">00</span><span class=\"p\">)</span> <span class=\"k\">while</span> <span class=\"n\">time</span> <span class=\"n\">zone</span> <span class=\"n\">support</span> <span class=\"ow\">is</span> <span class=\"n\">active</span><span class=\"o\">.</span>\n</code></pre></div>\n<p>開発中、以下を設定ファイルに追加することで、これらの警告を例外として発生するように変更し、トラックバックを得ることができます:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">warnings</span>\n<span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">filterwarnings</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;error&#39;</span><span class=\"p\">,</span> <span class=\"sa\">r</span><span class=\"s2\">&quot;DateTimeField .* received a naive datetime&quot;</span><span class=\"p\">,</span>\n    <span class=\"ne\">RuntimeWarning</span><span class=\"p\">,</span> <span class=\"sa\">r</span><span class=\"s1\">&#39;django\\.db\\.models\\.fields&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"fixtures\">\n<h3>フィクスチャー<a class=\"heading-anchor\" href=\"#fixtures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>aware な日時をシリアライズするとき、以下のように UTC オフセットが含まれます:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"s2\">&quot;2011-09-01T13:20:30+03:00&quot;</span>\n</code></pre></div>\n<p>While for a naive datetime, it isn't:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"s2\">&quot;2011-09-01T13:20:30&quot;</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/4.0/ref/models/fields/#django.db.models.DateTimeField\" title=\"django.db.models.DateTimeField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DateTimeField</span></code></a> を使ったモデルに対しては、この違いにより、タイムゾーンサポートのありとなし両方に対して動作するフィクスチャーを記述することができません。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code> もしくは Django 1.4 以前 で生成されたフィクスチャーは、&quot;naive&quot; 形式を使用します。このようなフィクス茶がプロジェクトに含まれる場合、タイムゾーンサポートを有効化した後に、これらをロードする際に <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#RuntimeWarning\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">RuntimeWarning</span></code></a> を参照してください。警告を破棄するには、これらのフィクスチャーを &quot;aware&quot; 形式に転換する必要があります。</p>\n<p><a class=\"reference internal\" href=\"/ja/4.0/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">loaddata</span></code></a> と <a class=\"reference internal\" href=\"/ja/4.0/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">dumpdata</span></code></a> でフィクスチャを再生成できます。または、それらが十分に小さい場合、シリアル化された各日時に <a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></code></a> に一致する UTC オフセットを追加するように編集できます。</p>\n</section>\n</section>\n<section id=\"faq\">\n<span id=\"time-zones-faq\"></span><h2>FAQ<a class=\"heading-anchor\" href=\"#faq\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"setup\">\n<h3>セットアップ<a class=\"heading-anchor\" href=\"#setup\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<ol class=\"arabic\">\n<li><p><strong>複数のタイムゾーンを必要としません。タイムゾーンサポートを有効化するべきですか？</strong></p>\n<p>Yes. When time zone support is enabled, Django uses a more accurate model\nof local time. This shields you from subtle and unreproducible bugs around\ndaylight saving time (DST) transitions.</p>\n<p>When you enable time zone support, you'll encounter some errors because\nyou're using naive datetimes where Django expects aware datetimes. Such\nerrors show up when running tests. You'll quickly learn how to avoid invalid\noperations.</p>\n<p>On the other hand, bugs caused by the lack of time zone support are much\nharder to prevent, diagnose and fix. Anything that involves scheduled tasks\nor datetime arithmetic is a candidate for subtle bugs that will bite you\nonly once or twice a year.</p>\n<p>For these reasons, time zone support is enabled by default in new projects,\nand you should keep it unless you have a very good reason not to.</p>\n</li>\n<li><p><strong>タイムゾーンサポートを有効化しました。私は安全ですか？</strong></p>\n<p>おそらく。DST 関連のバグからは守られるようになりましたが、それでも不用意な変換 ( naive な日時を aware な日時に変更する、およびその逆）ことによって自ら墓穴を掘る可能性があります。</p>\n<p>If your application connects to other systems -- for instance, if it queries\na web service -- make sure datetimes are properly specified. To transmit\ndatetimes safely, their representation should include the UTC offset, or\ntheir values should be in UTC (or both!).</p>\n<p>Finally, our calendar system contains interesting edge cases. For example,\nyou can't always subtract one year directly from a given date:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">datetime</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">one_year_before</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">):</span>  <span class=\"c1\"># Wrong example.</span>\n<span class=\"gp\">... </span>    <span class=\"k\">return</span> <span class=\"n\">value</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"n\">year</span><span class=\"o\">=</span><span class=\"n\">value</span><span class=\"o\">.</span><span class=\"n\">year</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">one_year_before</span><span class=\"p\">(</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"p\">(</span><span class=\"mi\">2012</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">))</span>\n<span class=\"go\">datetime.datetime(2011, 3, 1, 10, 0)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">one_year_before</span><span class=\"p\">(</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"p\">(</span><span class=\"mi\">2012</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">29</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">))</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">ValueError</span>: <span class=\"n\">day is out of range for month</span>\n</code></pre></div>\n<p>To implement such a function correctly, you must decide whether 2012-02-29\nminus one year is 2011-02-28 or 2011-03-01, which depends on your business\nrequirements.</p>\n</li>\n<li><p><strong>現地時刻で日時を保持しているデータベースと、どのようにやり取りすればいいですか？</strong></p>\n<p><a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-DATABASE-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></code></a> オプションを、<a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a> 設定内のデータベースに適したタイムゾーンにセットしてください。</p>\n<p>This is useful for connecting to a database that doesn't support time zones\nand that isn't managed by Django when <a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a> is <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n</li>\n</ol>\n</section>\n<section id=\"troubleshooting\">\n<h3>トラブルシューティング<a class=\"heading-anchor\" href=\"#troubleshooting\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<ol class=\"arabic\">\n<li><p><strong>私のアプリケーションが</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">TypeError:</span> <span class=\"pre\">can't</span> <span class=\"pre\">compare</span> <span class=\"pre\">offset-naive</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">and</span> <span class=\"pre\">offset-aware</span> <span class=\"pre\">datetimes</span></code> <strong>とともにクラッシュします -- 何がいけませんか？</strong></p>\n<p>naive と aware な日時を比較することによって、このエラーを再現してみましょう:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">aware</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">naive</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">make_naive</span><span class=\"p\">(</span><span class=\"n\">aware</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">naive</span> <span class=\"o\">==</span> <span class=\"n\">aware</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n<span class=\"c\">...</span>\n<span class=\"gr\">TypeError</span>: <span class=\"n\">can&#39;t compare offset-naive and offset-aware datetimes</span>\n</code></pre></div>\n<p>このエラーに遭遇した場合、あなたのコードはこれら 2 つを比較している可能性が高いです:</p>\n<ul class=\"simple\">\n<li><p>a datetime provided by Django -- for instance, a value read from a form or\na model field. Since you enabled time zone support, it's aware.</p></li>\n<li><p>a datetime generated by your code, which is naive (or you wouldn't be\nreading this).</p></li>\n</ul>\n<p>Generally, the correct solution is to change your code to use an aware\ndatetime instead.</p>\n<p>If you're writing a pluggable application that's expected to work\nindependently of the value of <a class=\"reference internal\" href=\"/ja/4.0/ref/settings/#std-setting-USE_TZ\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USE_TZ</span></code></a>, you may find\n<a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.timezone.now()</span></code></a> useful. This function returns the current\ndate and time as a naive datetime when <code class=\"docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span> <span class=\"pre\">False</span></code> and as an aware\ndatetime when <code class=\"docutils literal notranslate\"><span class=\"pre\">USE_TZ</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code>. You can add or subtract\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.timedelta\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime.timedelta</span></code></a> as needed.</p>\n</li>\n<li><p><strong>多くの</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">RuntimeWarning:</span> <span class=\"pre\">DateTimeField</span> <span class=\"pre\">received</span> <span class=\"pre\">a</span> <span class=\"pre\">naive</span> <span class=\"pre\">datetime</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">(YYYY-MM-DD</span> <span class=\"pre\">HH:MM:SS)</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">while</span> <span class=\"pre\">time</span> <span class=\"pre\">zone</span> <span class=\"pre\">support</span> <span class=\"pre\">is</span> <span class=\"pre\">active</span></code> <strong>が発生します。 -- これは悪いことですか？</strong></p>\n<p>When time zone support is enabled, the database layer expects to receive\nonly aware datetimes from your code. This warning occurs when it receives a\nnaive datetime. This indicates that you haven't finished porting your code\nfor time zone support. Please refer to the <a class=\"reference internal\" href=\"#time-zones-migration-guide\"><span class=\"std std-ref\">migration guide</span></a> for tips on this process.</p>\n<p>In the meantime, for backwards compatibility, the datetime is considered to\nbe in the default time zone, which is generally what you expect.</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">now.date()</span></code> <strong>が昨日 (もしくは明日) になります！</strong></p>\n<p>If you've always used naive datetimes, you probably believe that you can\nconvert a datetime to a date by calling its <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime.date\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">date()</span></code></a>\nmethod. You also consider that a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.date\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">date</span></code></a> is a lot like a\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a>, except that it's less accurate.</p>\n<p>None of this is true in a time zone aware environment:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">datetime</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">zoneinfo</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">paris_tz</span> <span class=\"o\">=</span> <span class=\"n\">zoneinfo</span><span class=\"o\">.</span><span class=\"n\">ZoneInfo</span><span class=\"p\">(</span><span class=\"s2\">&quot;Europe/Paris&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">new_york_tz</span> <span class=\"o\">=</span> <span class=\"n\">zoneinfo</span><span class=\"o\">.</span><span class=\"n\">ZoneInfo</span><span class=\"p\">(</span><span class=\"s2\">&quot;America/New_York&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">paris</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"p\">(</span><span class=\"mi\">2012</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">tzinfo</span><span class=\"o\">=</span><span class=\"n\">paris_tz</span><span class=\"p\">)</span>\n<span class=\"go\"># This is the correct way to convert between time zones.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">new_york</span> <span class=\"o\">=</span> <span class=\"n\">paris</span><span class=\"o\">.</span><span class=\"n\">astimezone</span><span class=\"p\">(</span><span class=\"n\">new_york_tz</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">paris</span> <span class=\"o\">==</span> <span class=\"n\">new_york</span><span class=\"p\">,</span> <span class=\"n\">paris</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"n\">new_york</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n<span class=\"go\">(True, False)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">paris</span> <span class=\"o\">-</span> <span class=\"n\">new_york</span><span class=\"p\">,</span> <span class=\"n\">paris</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">new_york</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n<span class=\"go\">(datetime.timedelta(0), datetime.timedelta(1))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">paris</span>\n<span class=\"go\">datetime.datetime(2012, 3, 3, 1, 30, tzinfo=zoneinfo.ZoneInfo(key=&#39;Europe/Paris&#39;))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">new_york</span>\n<span class=\"go\">datetime.datetime(2012, 3, 2, 19, 30, tzinfo=zoneinfo.ZoneInfo(key=&#39;America/New_York&#39;))</span>\n</code></pre></div>\n<p>As this example shows, the same datetime has a different date, depending on\nthe time zone in which it is represented. But the real problem is more\nfundamental.</p>\n<p>A datetime represents a <strong>point in time</strong>. It's absolute: it doesn't depend\non anything. On the contrary, a date is a <strong>calendaring concept</strong>. It's a\nperiod of time whose bounds depend on the time zone in which the date is\nconsidered. As you can see, these two concepts are fundamentally different,\nand converting a datetime to a date isn't a deterministic operation.</p>\n<p>What does this mean in practice?</p>\n<p>Generally, you should avoid converting a <a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.datetime\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">datetime</span></code></a> to\n<a class=\"reference external\" href=\"https://docs.python.org/3/library/datetime.html#datetime.date\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">date</span></code></a>. For instance, you can use the <a class=\"reference internal\" href=\"/ja/4.0/ref/templates/builtins/#std-templatefilter-date\"><code class=\"xref std std-tfilter docutils literal notranslate\"><span class=\"pre\">date</span></code></a>\ntemplate filter to only show the date part of a datetime. This filter will\nconvert the datetime into the current time zone before formatting it,\nensuring the results appear correctly.</p>\n<p>If you really need to do the conversion yourself, you must ensure the\ndatetime is converted to the appropriate time zone first. Usually, this\nwill be the current timezone:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"n\">zoneinfo</span><span class=\"o\">.</span><span class=\"n\">ZoneInfo</span><span class=\"p\">(</span><span class=\"s2\">&quot;Asia/Singapore&quot;</span><span class=\"p\">))</span>\n<span class=\"go\"># For this example, we set the time zone to Singapore, but here&#39;s how</span>\n<span class=\"go\"># you would obtain the current time zone in the general case.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">current_tz</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">get_current_timezone</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">local</span> <span class=\"o\">=</span> <span class=\"n\">paris</span><span class=\"o\">.</span><span class=\"n\">astimezone</span><span class=\"p\">(</span><span class=\"n\">current_tz</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">local</span>\n<span class=\"go\">datetime.datetime(2012, 3, 3, 8, 30, tzinfo=zoneinfo.ZoneInfo(key=&#39;Asia/Singapore&#39;))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">local</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n<span class=\"go\">datetime.date(2012, 3, 3)</span>\n</code></pre></div>\n</li>\n<li><p><strong>I get an error</strong> &quot;<code class=\"docutils literal notranslate\"><span class=\"pre\">Are</span> <span class=\"pre\">time</span> <span class=\"pre\">zone</span> <span class=\"pre\">definitions</span> <span class=\"pre\">for</span> <span class=\"pre\">your</span> <span class=\"pre\">database</span>\n<span class=\"pre\">installed?</span></code>&quot;</p>\n<p>If you are using MySQL, see the <a class=\"reference internal\" href=\"/ja/4.0/ref/databases/#mysql-time-zone-definitions\"><span class=\"std std-ref\">Time zone definitions</span></a> section\nof the MySQL notes for instructions on loading time zone definitions.</p>\n</li>\n</ol>\n</section>\n<section id=\"usage\">\n<h3>使い方<a class=\"heading-anchor\" href=\"#usage\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<ol class=\"arabic\">\n<li><p><strong>文字列</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;2012-02-21</span> <span class=\"pre\">10:28:45&quot;</span></code> <strong>があり、</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Europe/Helsinki&quot;</span></code> <strong>タイムゾーンであることが分かっています。どうやって aware な日時に変換しますか？</strong></p>\n<p>Here you need to create the required <code class=\"docutils literal notranslate\"><span class=\"pre\">ZoneInfo</span></code> instance and attach it to\nthe naïve datetime:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">zoneinfo</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.dateparse</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">parse_datetime</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">naive</span> <span class=\"o\">=</span> <span class=\"n\">parse_datetime</span><span class=\"p\">(</span><span class=\"s2\">&quot;2012-02-21 10:28:45&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">naive</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"n\">tzinfo</span><span class=\"o\">=</span><span class=\"n\">zoneinfo</span><span class=\"o\">.</span><span class=\"n\">ZoneInfo</span><span class=\"p\">(</span><span class=\"s2\">&quot;Europe/Helsinki&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">datetime.datetime(2012, 2, 21, 10, 28, 45, tzinfo=zoneinfo.ZoneInfo(key=&#39;Europe/Helsinki&#39;))</span>\n</code></pre></div>\n</li>\n<li><p><strong>どうやってカレントタイムゾーンで現在時刻を取得しますか？</strong></p>\n<p>そうですね。最初に質問させてください。それは本当に必要ですか？</p>\n<p>人間とやり取りするときだけ、現地時刻を使うべきです。そして、テンプレートレイヤは日時をあなたが選択したタイムゾーンに転換するための <a class=\"reference internal\" href=\"#time-zones-in-templates\"><span class=\"std std-ref\">フィルタとタグ</span></a> タグを提供しています。</p>\n<p>Furthermore, Python knows how to compare aware datetimes, taking into\naccount UTC offsets when necessary. It's much easier (and possibly faster)\nto write all your model and view code in UTC. So, in most circumstances,\nthe datetime in UTC returned by <a class=\"reference internal\" href=\"/ja/4.0/ref/utils/#django.utils.timezone.now\" title=\"django.utils.timezone.now\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.utils.timezone.now()</span></code></a> will be\nsufficient.</p>\n<p>For the sake of completeness, though, if you really want the local time\nin the current time zone, here's how you can obtain it:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">timezone</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">localtime</span><span class=\"p\">(</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span>\n<span class=\"go\">datetime.datetime(2012, 3, 3, 20, 10, 53, 873365, tzinfo=zoneinfo.ZoneInfo(key=&#39;Europe/Paris&#39;))</span>\n</code></pre></div>\n<p>In this example, the current time zone is <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Europe/Paris&quot;</span></code>.</p>\n</li>\n<li><p><strong>全ての利用可能なタイムゾーンを参照するにはどうすればいいですか？</strong></p>\n<p><a class=\"reference external\" href=\"https://docs.python.org/3/library/zoneinfo.html#zoneinfo.available_timezones\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">zoneinfo.available_timezones()</span></code></a> provides the set of all valid keys for\nIANA time zones available to your system. See the docs for usage\nconsiderations.</p>\n</li>\n</ol>\n</section>\n</section>","rootId":"time-zones","toc":[{"title":"概要","anchor":"overview","children":[]},{"title":"コンセプト","anchor":"concepts","children":[{"title":"native と aware の日時オブジェクト","anchor":"naive-and-aware-datetime-objects","children":[]},{"title":"native な datetime オブジェクトの変換","anchor":"interpretation-of-naive-datetime-objects","children":[]},{"title":"デフォルトタイムゾーンとカレントタイムゾーン","anchor":"default-time-zone-and-current-time-zone","children":[]},{"title":"カレントタイムゾーンを選択する","anchor":"selecting-the-current-time-zone","children":[]}]},{"title":"フォームでのタイムゾーン aware な入力","anchor":"time-zone-aware-input-in-forms","children":[]},{"title":"テンプレートでのタイムゾーン aware な出力","anchor":"time-zone-aware-output-in-templates","children":[{"title":"テンプレートタグ","anchor":"template-tags","children":[{"title":"localtime","anchor":"localtime","children":[]},{"title":"timezone","anchor":"timezone","children":[]},{"title":"get_current_timezone","anchor":"get-current-timezone","children":[]}]},{"title":"テンプレートフィルタ","anchor":"template-filters","children":[{"title":"localtime","anchor":"std-templatefilter-localtime","children":[]},{"title":"utc","anchor":"utc","children":[]},{"title":"timezone","anchor":"std-templatefilter-timezone","children":[]}]}]},{"title":"移行ガイド","anchor":"migration-guide","children":[{"title":"データベース","anchor":"database","children":[{"title":"PostgreSQL","anchor":"postgresql","children":[]},{"title":"他のデータベース","anchor":"other-databases","children":[]}]},{"title":"コード","anchor":"code","children":[]},{"title":"フィクスチャー","anchor":"fixtures","children":[]}]},{"title":"FAQ","anchor":"faq","children":[{"title":"セットアップ","anchor":"setup","children":[]},{"title":"トラブルシューティング","anchor":"troubleshooting","children":[]},{"title":"使い方","anchor":"usage","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/4.0/topics/"},{"docname":"topics/i18n/index","title":"国際化とローカル化","url":"/ja/4.0/topics/i18n/"}],"prev":{"docname":"topics/i18n/formatting","title":"表示形式のローカル化","url":"/ja/4.0/topics/i18n/formatting/"},"next":{"docname":"topics/logging","title":"ロギング","url":"/ja/4.0/topics/logging/"},"formats":{"html":"/ja/4.0/topics/i18n/timezones/","markdown":"/ja/4.0/topics/i18n/timezones.md","json":"/ja/4.0/topics/i18n/timezones.json"},"source":"https://github.com/django/django/blob/stable/4.0.x/docs/topics/i18n/timezones.txt","official":"https://docs.djangoproject.com/ja/4.0/topics/i18n/timezones/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}