Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Menukar Datetime UTC kepada Datetime Tempatan dalam Python Menggunakan Perpustakaan Standard?

Bagaimana untuk Menukar Datetime UTC kepada Datetime Tempatan dalam Python Menggunakan Perpustakaan Standard?

Linda Hamilton
Linda Hamiltonasal
2024-11-02 03:43:301047semak imbas

How to Convert a UTC Datetime to a Local Datetime in Python Using the Standard Library?

Menukar Waktu Tarikh UTC kepada Masa Tarikh Setempat Menggunakan Pustaka Standard Python

Dalam pengaturcaraan, selalunya perlu menukar waktu tarikh antara zon waktu yang berbeza. Pustaka Python standard menyediakan fungsi terhad untuk ini, tetapi adalah mungkin untuk mencapai penukaran asas tanpa kebergantungan luaran.

Masalah

Memandangkan contoh datetime UTC dibuat dengan datetime.utcnow(), bagaimana bolehkah kita menukarnya kepada contoh datetime tempatan, hanya menggunakan perpustakaan standard Python? Selain itu, bagaimanakah kita boleh mendapatkan zon waktu tempatan lalai?

Penyelesaian

Python 3.3 :

<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 ( menggunakan cap masa integer):

<code class="python">import calendar
from datetime import datetime, timedelta

def utc_to_local(utc_dt):
    timestamp = calendar.timegm(utc_dt.timetuple())
    local_dt = datetime.fromtimestamp(timestamp)
    return local_dt.replace(microsecond=utc_dt.microsecond)</code>

Menggunakan pytz (Pilihan)**

Python 2/3 (dengan pergantungan pytz):

<code class="python">import pytz

local_tz = pytz.timezone('Europe/Moscow') # use local timezone name here

def utc_to_local(utc_dt):
    local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz)
    return local_tz.normalize(local_dt)</code>

Contoh

<code class="python">def aslocaltimestr(utc_dt):
    return utc_to_local(utc_dt).strftime('%Y-%m-%d %H:%M:%S.%f %Z%z')

print(aslocaltimestr(datetime(2010,  6, 6, 17, 29, 7, 730000)))
print(aslocaltimestr(datetime(2010, 12, 6, 17, 29, 7, 730000)))
print(aslocaltimestr(datetime.utcnow()))</code>

Output

2010-06-06 21:29:07.730000 MSD+0400
2010-12-06 20:29:07.730000 MSK+0300
2012-11-08 14:19:50.093745 MSK+0400

Nota

  • Penyelesaian bukan pytz mungkin tidak berfungsi pada Windows.
  • Contoh yang diberikan mengambil kira Waktu Penjimatan Siang dan perubahan offset UTC terbaru untuk zon waktu MSK.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Datetime UTC kepada Datetime Tempatan dalam Python Menggunakan Perpustakaan Standard?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn