Dalam banyak senario, pengendalian tarikh dan masa dalam Python memerlukan menukarkannya kepada cap masa UTC untuk penyepaduan yang lancar dengan sistem atau rangka kerja lain yang beroperasi pada Universal Coordinated Masa. Walau bagaimanapun, proses penukaran ini mungkin menghadapi halangan. Contohnya, coretan di bawah menghasilkan hasil yang tidak dijangka:
import datetime d = datetime.date(2011, 01, 01) # A date object timestamp = datetime.datetime.utcfromtimestamp(time.mktime(d.timetuple())) print(timestamp) # Output: datetime.datetime(2010, 12, 31, 23, 0)
Hasil yang dijangkakan ialah cap waktu UTC untuk 1 Januari 2011, tetapi sebaliknya, kami mendapat 31 Disember 2010, pada 23:00 UTC.
Mari kita terokai penyelesaian kepada isu ini dan fahami cara mendapatkan UTC yang betul cap masa untuk objek tarikh dalam Python.
Objek tarikh yang disediakan d ialah objek tarikh Python asli yang mewakili tarikh tanpa sebarang maklumat masa . Untuk mendapatkan cap waktu UTC yang betul, kita perlu memastikan bahawa objek tarikh dipertimbangkan secara eksplisit dalam konteks UTC.
Berikut ialah dua kaedah untuk mencapai ini:
Pilihan 1: Menggunakan calendar.timegm()
Pendekatan ini mengandaikan bahawa objek tarikh d berada dalam UTC zon waktu.
import calendar timestamp = calendar.timegm(d.timetuple()) print(timestamp) # Output: 1293840000
Output ialah cap waktu UTC yang betul untuk 1 Januari 2011, pada 00:00.
Pilihan 2: Menggunakan datetime.timestamp()
Pilihan ini tersedia dalam Python versi 3.3 dan lebih baru dan memerlukan kami untuk menyatakan dengan jelas zon waktu UTC sebelum mendapatkan cap masa.
from datetime import timezone d_utc = d.replace(tzinfo=timezone.utc) # Explicitly specify UTC timezone timestamp = d_utc.timestamp() print(timestamp)
Output adalah konsisten dengan pendekatan sebelumnya.
Jika anda mempunyai objek datetime dan bukannya objek tarikh, proses penukaran sedikit berbeza. Anda boleh menggunakan kaedah berikut:
Python 3.3
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
Python 3 (< 3.3)
timestamp = (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)) / timedelta(seconds=1)
Python 2
timestamp = (dt - datetime(1970, 1, 1)).total_seconds()
Ingat untuk berhati-hati dengan potensi isu titik terapung dan pastikan ketepatan cap masa anda.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Objek Tarikh Python dengan betul kepada Cap Waktu UTC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!