Những gì bạn đã bỏ lỡ ở đây là múi giờ.
Có lẽ bạn đã nghỉ năm giờ UTC, vì vậy 2013-09-01T11: 00: 00 địa phương và 2013-09-01T06: 00: 00Z là cùng một lúc.
Bạn cần đọc phần trên cùng của datetime
tài liệu, trong đó giải thích về múi giờ và các đối tượng "ngây thơ" và "nhận thức".
Nếu datetime ngây thơ ban đầu của bạn là UTC, cách để phục hồi nó là sử dụng utcfromtimestamp
thay vì fromtimestamp
.
Mặt khác, nếu datetime ngây thơ ban đầu của bạn là cục bộ, bạn không nên trừ dấu thời gian UTC khỏi nó ở vị trí đầu tiên; sử dụng datetime.fromtimestamp(0)
thay thế.
Hoặc, nếu bạn đã có một đối tượng datetime nhận thức, bạn cần sử dụng một epoch cục bộ (nhận biết) ở cả hai bên, hoặc chuyển đổi rõ ràng sang và từ UTC.
Nếu bạn có, hoặc có thể nâng cấp lên, Python 3.3 trở lên, bạn có thể tránh tất cả các vấn đề này bằng cách chỉ sử dụng timestamp
phương pháp thay vì cố gắng tìm ra cách tự làm. Và ngay cả khi bạn không, bạn có thể muốn xem xét việc mượn mã nguồn của nó .
(Và nếu bạn có thể chờ cho Python 3.4, có vẻ như PEP 341 có khả năng để làm cho nó vào việc phát hành chính thức, có nghĩa là tất cả những thứ JF Sebastian và tôi đã nói về trong các ý kiến nên được doable chỉ với stdlib, và hoạt động theo cùng một cách trên cả Unix và Windows.)