Tôi đang cố gắng viết một cặp hàm, dt
và ut
, chuyển đổi qua lại giữa thời gian unix bình thường (giây kể từ 1970-01-01 00:00:00 UTC) và một đối tượng datetime Python.Chuyển đổi một unixtime thành đối tượng datetime và ngược lại (cặp hàm chuyển đổi thời gian là nghịch đảo)
Nếu dt
và ut
là ngược thích hợp sau đó mã này sẽ in dấu thời gian tương tự hai lần:
import time, datetime
# Convert a unix time u to a datetime object d, and vice versa
def dt(u): return datetime.datetime.fromtimestamp(u)
def ut(d): return time.mktime(d.timetuple())
u = 1004260000
print u, "-->", ut(dt(u))
Than ôi, dấu thời gian thứ hai là 3600 giây (một giờ) ít hơn so với lần đầu tiên. Tôi nghĩ rằng điều này chỉ xảy ra cho những thời gian nhất định, có thể trong giờ đó mà thời gian tiết kiệm ánh sáng ban ngày bỏ qua. Nhưng có cách nào để viết dt
và ut
để chúng là những nghịch đảo thực sự của nhau không?
câu hỏi liên quan: Making matplotlib's date2num and num2date perfect inverses
btw, nếu chức năng không làm gì nhưng gọi một chức năng với cùng các đối số thì bạn chỉ có thể gán nó: 'dt = datetime.datetime.utcfromtimestamp'. Các hàm là các công dân hạng nhất trong Python: bạn có thể chuyển chúng thành các tham số cho các hàm khác, trả về từ các hàm, v.v. – jfs
Ah, đẹp, điểm tuyệt vời! Liệu nó có hiệu quả hơn để làm như vậy hay chỉ là vấn đề gọn gàng? Điều gì về 'def f (x): return foo (x)' vs 'f = lambda x: foo (x)'? (Nhớ lại của tôi là những cái tương đương, cả về mặt chức năng và hiệu quả.) – dreeves
'f = g' có nghĩa là f, g là hai tên tham chiếu đến cùng một hàm. 'def' và' lambda' tạo hàm mới. – jfs