Hướng dẫn python timezone conversion
Please note: The first part of this answer is or version 1.x of pendulum. See below for a version 2.x answer. Show
I hope I'm not too late! The pendulum library excels at this and other date-time calculations.
Answer lists the names of the time zones that may be used with pendulum. (They're the same as for pytz.) For version 2:
... Tổng quanGần đây mình có làm việc nhiều với kiểu dữ liệu Datetime trong Python. Vấn đề mình gặp phải là xử lý nhiều loại time format khác nhau, chuyển hóa thành dạng Datetime, chuẩn hóa thời gian lưu trữ và lưu vào database. Và sau đây, mình sẽ viết bài chia sẻ về cách mình xử lý kiểu dữ liệu Datetime trong Python. Trong bài mình sẽ sử dụng Python 3 để xử lý kiểu dữ liệu Datetime. Nội dung chính
Tips 1: Chuẩn hóa múi giờ sử dụngĐầu tiên, cũng là quan trọng nhất, chuẩn hóa múi giờ sử dụng để convert các kiểu thời gian. Mình lựa chọn sử dụng chuẩn múi giờ UTC để chuẩn hóa thời gian cho cả hệ thống cũng như làm múi giờ chuẩn để xử lý các loại format thời gian khác nhau. Tham khảo thêm về thời gian UTC tại Tips 2: Convert String thành DatetimeXử lý bằng hàm
Xử lý bằng strptime
Lưu ý:
Tips 3: Chuyển hóa kiểu Datetime sang Timestamp PythonTimestamp là kiểu thời gian thông dụng của hệ thông Unix, tìm hiểu thêm tại
Tips 4: Chuyển hóa kiểu native date sang UTC timezoneKiểm tra kiểu timezone
Lưu ý: không sử dụng hàm replace, hàm replace sẽ chỉ thay đổi tzinfo không qui đổi thời gian từ múi giờ này sang múi giờ khác Tips 5: Convert UTC sang timezone khácNếu bạn ở múi giờ Việt Nam (GMT + 7), tức nếu hiện tại là 8 giờ sáng (giờ Việt Nam) thì quy ra giờ UTC tức 1 giờ sáng (giờ UTC). Vậy nếu Datetime đang ở múi giờ UTC, ta phải convert nó sáng giờ Việt Nam
Tips 6: Chuyên từ Timestamp sang Datetime
Tips 7: Convert Datetime sang ISO 8601ISO 8601 là một tiêu chuẩn quốc tế, được đưa ra bởi Tổ chức tiêu chuẩn hóa quốc tế (ISO) lần đầu tiên năm 1988, mô tả quy cách viết ngày tháng và thời gian theo cách đơn giản nhất mà máy tính có thể hiểu được. Còn đối với Python ISO 8601 Datetime là string format time thông dụng.
Nguồnhttps://vi.wikipedia.org/wiki/Th%E1%BA%A3o_lu%E1%BA%ADn:M%C3%BAi_gi%E1%BB%9D https://vi.wikipedia.org/wiki/Th%E1%BA%A3o_lu%E1%BA%ADn:M%C3%BAi_gi%E1%BB%9D Thực hiện bởi cloud365.vn Múi giờ (timezone) là gì?Múi giờ của bạn là bao nhiêu? Nếu câu trả lời là “UTC+X” thì có thể là nó đúng trong thời điểm hiện tại, chứ không hắn là lúc nào cũng vậy. Ví dụ dữ liệu múi giờ của “Asia/Ho_Chi_Minh”:
Bạn có thể thấy giá trị của X (GMTOFF) thay đổi qua từng thời kì, và hiện tại là +7. Ngoài ra trên thế giới ở một số quốc gia còn áp dụng quy ước giờ mùa hè (Daylight Saving Time - DST), nó là quy ước chỉnh đồng hồ tăng thêm một khoảng thời gian (thường là 1 giờ) so với giờ tiêu chuẩn trong một giai đoạn (thường là vào mùa hè) trong năm. Nó có ý nghĩa thực tiễn là giúp tiết kiệm năng lượng chiếu sáng và sưởi ấm, khi tận dụng ánh sáng ban ngày của ngày làm việc từ sớm, giảm chiếu sáng ban đêm nhờ ngủ sớm. Cũng chính vì thế mà DST gây ra những vấn đề lớn trong tính toán. Vậy ta lấy gì làm mốc?Múi giờ lấy làm mốc bây giờ là UTC. UTC là múi giờ không có DST hay những thay đổi trong quá khứ. Từ UTC bạn có thể chuyển đổi giờ sang giờ địa phương, nhưng ngược lại chưa chắc đã đúng vì lý do đã nêu ở trên.
Còn vấn đề nào khác?Tuy nhiên trong thư viện chuẩn của Python lại có sai sót trong thiết kế:
Tuy nhiên một số thứ không đúng. Vấn đề lớn nhất là chúng ta không thể tính toán với datetime object có timezone và datetime object không có chính timezone đó:
Một vấn đề khác là có 2 cách để tạo datetime object vào thời điểm hiện tại trong Python:
Một là giờ ở UTC, một là giờ địa phương. Tuy nhiên nó lại không cho bạn biết múi giờ địa phương là gì cũng như với 2 giá trị Thư viện còn cung cấp Best practicesConvert timezoneNếu bạn muốn tạo
Bạn có thể thấy với Sử dụng UTC trong tính toán nội bộNếu bạn muốn lấy thời gian hiện tại, luôn luôn dùng Không nên dùng offset-aware datetime
Nó
có thể là ý tưởng tốt nếu bạn lưu tzinfo trong
Tại sao bạn nên làm như vậy? Đầu tiên là nhiều thư viện được viết với ngầm định Lý do cuối cùng mà bạn không nên dùng offset-aware là bởi vì |