datetime: lấy dấu thời gian với độ lệch múi giờ
Tôi muốn lấy dấu thời gian từ các ngày ở các định dạng sau:
Mon, 23 Nov 2020 19:00:00 GMT
Mon, 23 Nov 2020 20:00:00 +0100
Tôi đang sử dụng các câu lệnh sau để chuyển đổi ngày tháng thành datetimecác đối tượng:
dateobj = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %Z')
dateobj = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %z')
Nhưng sử dụng .timestamp()phương pháp, giây khác với kỷ nguyên được in. Tại sao %Zchỉ thị không thêm thông tin múi giờ vào datetimeđối tượng? Làm cách nào tôi có thể tính đến múi giờ để dấu thời gian bằng nhau?
Trả lời
Xin lưu ý rằng múi giờ phân tích cú pháp datetime không nhất quán trong Python . Vấn đề của bạn là %Znó strptime chấp nhận một số chuỗi nhất định (GMT, UTC và bất kỳ giá trị nào trong time.tzname - docs ), nhưng không thực sự tạo ra bất kỳ điều gì từ nó. Đối tượng datetime được trả về là ngây thơ - đó là lý do tại sao Python sẽ cho rằng đó là giờ địa phương nếu bạn gọi timestamp()phương thức của nó.
Bạn có thể sử dụng trình phân tích cú pháp của dateutil để thay thế:
from dateutil.parser import parse
for s in ("Mon, 23 Nov 2020 19:00:00 GMT", "Mon, 23 Nov 2020 20:00:00 +0100"):
dt = parse(s)
print(repr(dt), dt.timestamp())
# datetime.datetime(2020, 11, 23, 19, 0, tzinfo=tzutc()) 1606158000.0
# datetime.datetime(2020, 11, 23, 20, 0, tzinfo=tzoffset(None, 3600)) 1606158000.0