日時を操作するとき、特に永続化されたデータを取得して表示するときに、異なるタイムゾーン間で変換する必要があることがよくあります。この記事では、Python 標準ライブラリのみを使用して UTC 日付時刻をローカル日付時刻に変換する方法を示し、Python 2 および 3 用の複数のソリューションを提供します。
UTC 日付時刻を次の形式に変換するにはローカル日時の場合は、デフォルトのローカルタイムゾーンを知る必要があります。残念ながら、Python にはこの情報を取得する簡単な方法がありません。ただし、タイムゾーン オブジェクトを作成して使用してそれを表すことができます。
Python 3.3 では、 datetime.astimezone(tz) メソッドを利用して、 datetime をローカルタイムゾーンに変換します。ただし、デフォルトのローカル タイムゾーンを取得する必要があります。これは、timezone.utc を使用して実現できます。
<code class="python">from datetime import datetime, timezone def utc_to_local(utc_dt): return utc_dt.replace(tzinfo=timezone.utc).astimezone(tz=None)</code>
Python 2/3 では、datetime.astimezone () は使用できないため、次のアプローチを使用できます:
<code class="python">import calendar from datetime import datetime, timedelta def utc_to_local(utc_dt): # get integer timestamp to avoid precision lost timestamp = calendar.timegm(utc_dt.timetuple()) local_dt = datetime.fromtimestamp(timestamp) assert utc_dt.resolution >= timedelta(microseconds=1) return local_dt.replace(microsecond=utc_dt.microsecond)</code>
カスタム書式設定関数で utc_to_local() 関数を使用する例を次に示します:
<code class="python">from datetime import datetime def aslocaltimestr(utc_dt): return utc_to_local(utc_dt).strftime('%Y-%m-%d %H:%M:%S.%f %Z%z') utc_dt1 = datetime(2010, 6, 6, 17, 29, 7, 730000) utc_dt2 = datetime(2010, 12, 6, 17, 29, 7, 730000) utc_dt3 = datetime.utcnow() print(aslocaltimestr(utc_dt1)) print(aslocaltimestr(utc_dt2)) print(aslocaltimestr(utc_dt3))</code>
Python の標準ライブラリのみを使用して UTC 日時をローカル日時に変換するには、タイムゾーン オブジェクトを作成するか、カレンダーと日時の操作を含むより複雑なアプローチを使用する必要があります。 pytz または tzlocal を使用する方が便利ですが、これらのソリューションは、外部依存関係なしで日時変換を処理するための Python の標準ライブラリの柔軟性を示しています。
以上がPython の標準ライブラリを使用して UTC 日時をローカル タイムゾーンに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。