Tôi có tình huống sau đây: - Postgres backend với một lĩnh vựcSQLAlchemy chuyển đổi UTC DateTime để giờ địa phương trước khi lưu
timestamp without time zone
- Ngay trước khi lưu giá trị datetime, nó trông giống như: 2014/09/29 06: 00: 00 + 00: 00
- sau đó tôi tải cùng hàng từ db và giá trị là: 2014-09-29 09:00:00
Vì vậy, trong cơ sở dữ liệu được lưu trữ ngày là không còn 6AM .. nhưng 9AM - nó được chuyển đổi theo múi giờ địa phương của tôi.
Tôi không hiểu điều gì đang xảy ra. Tại sao ngày đã lưu được chuyển đổi thành địa phương?
Cảm ơn.
Sửa
Vì vậy, sau khi trả lời @ univerio của tôi đã cố gắng một cái gì đó: tôi loại bỏ các tzinfo kể từ thời điểm cập nhật bằng cách làm
.replace(tzinfo = None)
Và bây giờ ngày được lưu một cách chính xác - nó không điều chỉnh nó đến giờ địa phương. Tôi không hiểu tại sao vì vậy tôi sẽ để câu hỏi mở ngay bây giờ trong trường hợp ai đó có một lời giải thích.
Cảm ơn.
Re chỉnh sửa của bạn: có vẻ như một dấu thời gian với thông tin múi giờ sẽ được chuyển đổi sang múi giờ của kết nối khi được lưu trữ dưới dạng 'dấu thời gian không có múi giờ' bởi PostgreSQL. Bằng cách làm cho 'datetime's ngây thơ, bạn đang yêu cầu PostgreSQL lưu dấu thời gian như hiện tại. Đây là một giải pháp ổn nếu bạn ổn với 'datetime' ngây thơ. Cá nhân, tôi nghĩ tốt hơn là tránh những gotchas này bằng cách luôn làm việc với 'datetime's /' timestamp 'và luôn luôn sử dụng UTC. – univerio