Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

So sánh calendar.timegm() và time.mktime() trong Python

Hai hàm này đều chuyển tuple thời gian (struct_time) sang timestamp (giây từ epoch), nhưng giả định khác nhau về múi giờ của input.

Khác biệt cốt lõi

Ví dụ minh họa

import calendar
import time
from datetime import datetime

dt = datetime(2017, 12, 31, 0, 0, 0)  # Naive datetime
timetup = dt.timetuple()

print("time.mktime (local):", time.mktime(timetup))
print("calendar.timegm (UTC):", calendar.timegm(timetup))

Kết quả (trên máy UTC+7)

time.mktime (local): 1514658600.0
calendar.timegm (UTC): 1514678400

Chênh lệch = 19800 giây = 5.5 giờ = offset của múi giờ địa phương.

Khi nào dùng cái nào?

  • time.mktime(): Khi tuple đại diện cho giờ địa phương người dùng (ví dụ: nhập từ form web).
  • calendar.timegm(): Khi tuple đại diện cho giờ UTC (ví dụ: log server, API, database lưu UTC).
  • Best practice: Luôn dùng datetime aware (có tzinfo) và dt.timestamp() thay vì 2 hàm này.
HàmGiả định inputMô tả
time.mktime()Giờ địa phương (local time)Dùng C mktime(), phụ thuộc múi giờ hệ thống
calendar.timegm()Giờ UTC/GMTTự tính toán, không phụ thuộc múi giờ hệ thống