Tôi có một cơ sở dữ liệu lưu trữ datetime như UTC. Tôi cần tra cứu thông tin từ một thời điểm cụ thể, nhưng ngày và thời gian được đưa ra theo giờ địa phương, hãy nói 'Châu Âu/Copenhagen'. Tôi được cung cấp những điều này là:Python pytz: chuyển đổi giờ địa phương thành utc. Localize dường như không chuyển đổi
year = 2012; month = 12; day = 2; hour = 13; min = 1;
Vì vậy, tôi cần phải chuyển đổi chúng thành UTC để tôi có thể tra cứu chúng trong cơ sở dữ liệu. Tôi muốn làm điều này bằng cách sử dụng pytz
. Tôi đang tìm kiếm tại localize
:
local_tz = timezone('Europe/Copenhagen')
t = local_tz.localize(datetime.datetime(year, month, day, hour, min))
Nhưng tôi là nhầm lẫn về localize()
. Điều này giả định rằng năm đó, vv, được trao cho tôi trong thời gian địa phương? Hoặc, là nó giả định rằng họ được đưa ra trong UTC và bây giờ nó đã chuyển đổi chúng thành giờ địa phương?
print t
mang lại cho tôi:
2012-12-02 13:01:00+01:00
Vì vậy, có vẻ như nó giả định rằng năm ban đầu, vv là trong utc; giờ là 13 + 1 thay vì 13. Giờ tôi nên làm gì? Tôi đã đọc tài liệu về pytz và điều này không làm cho nó rõ ràng hơn với tôi. Nó đề cập rất nhiều rằng mọi thứ rất phức tạp vì vậy tôi không chắc liệu pytz có thực sự giải quyết những vấn đề này hay không. Và, tôi không phải lúc nào cũng biết các ví dụ có cho tôi thấy những thứ hoạt động hay những thứ không hoạt động.
Tôi cố gắng bình thường hóa:
print local_tz.normalize(t)
Điều đó mang lại cho tôi những kết quả tương tự như in t.
CHỈNH SỬA: Với các số được đưa ra ở trên trong năm, v.v. phải khớp với thông tin trong cơ sở dữ liệu cho 2012-12-2 12:01. (Từ Copenhagen là utc + 1 vào ngày đó)
Điều đó cho giờ là 14: 01: 00 + 01: 00. Giờ địa phương chính xác là 13 và giờ utc là 12. – user984003
@ user984003: Ah, xin lỗi, đã đọc sai câu đầu tiên. '.astimezone()' vẫn là con đường để đi, chỉ là một cách khác. –
Vâng, cách thứ hai đó hoạt động, cảm ơn. Có thể bạn chỉ có điều đó trong câu trả lời của bạn, nếu không tôi nghĩ rằng đó là một chút khó hiểu;) Tôi thấy rằng tôi đã nhầm lẫn về ngày in. "+01: 00" nói với tôi rằng đó là một giờ trước utc, không phải là tôi nên thêm một giờ vào thời điểm đó. – user984003