Nếu bạn biết thời gian gốc của mình và múi giờ mới mà bạn muốn chuyển đổi nó thành, thì hóa ra nó rất đơn giản:
Tạo hai đối tượng
pytz.timezone
, một cho múi giờ hiện tại và một đối tượng cho múi giờ mới, ví dụ:
0. Bạn có thể tìm thấy một danh sách tất cả các múi giờ chính thức trong thư việnimport datetime import pytz # a timestamp I'd like to convert my_timestamp = datetime.datetime.now[] # create both timezone objects old_timezone = pytz.timezone["US/Eastern"] new_timezone = pytz.timezone["US/Pacific"] # two-step process localized_timestamp = old_timezone.localize[my_timestamp] new_timezone_timestamp = localized_timestamp.astimezone[new_timezone] # or alternatively, as an one-liner new_timezone_timestamp = old_timezone.localize[my_timestamp].astimezone[new_timezone]
1:import datetime import pytz # a timestamp I'd like to convert my_timestamp = datetime.datetime.now[] # create both timezone objects old_timezone = pytz.timezone["US/Eastern"] new_timezone = pytz.timezone["US/Pacific"] # two-step process localized_timestamp = old_timezone.localize[my_timestamp] new_timezone_timestamp = localized_timestamp.astimezone[new_timezone] # or alternatively, as an one-liner new_timezone_timestamp = old_timezone.localize[my_timestamp].astimezone[new_timezone]
2import datetime import pytz # a timestamp I'd like to convert my_timestamp = datetime.datetime.now[] # create both timezone objects old_timezone = pytz.timezone["US/Eastern"] new_timezone = pytz.timezone["US/Pacific"] # two-step process localized_timestamp = old_timezone.localize[my_timestamp] new_timezone_timestamp = localized_timestamp.astimezone[new_timezone] # or alternatively, as an one-liner new_timezone_timestamp = old_timezone.localize[my_timestamp].astimezone[new_timezone]
Bản địa hóa DateTime/Dấu thời gian quan tâm đến múi giờ hiện tại, ví dụ:
current_timezone = pytz.timezone["US/Eastern"]
localized_timestamp = current_timezone.localize[timestamp]
- Chuyển đổi thành múi giờ mới bằng cách sử dụng
3 trên DateTime/Dấu thời gian mới được định vị từ Bước 2 với đối tượng PYTZ của Timezone mong muốn làm đầu vào, ví dụ:import datetime import pytz # a timestamp I'd like to convert my_timestamp = datetime.datetime.now[] # create both timezone objects old_timezone = pytz.timezone["US/Eastern"] new_timezone = pytz.timezone["US/Pacific"] # two-step process localized_timestamp = old_timezone.localize[my_timestamp] new_timezone_timestamp = localized_timestamp.astimezone[new_timezone] # or alternatively, as an one-liner new_timezone_timestamp = old_timezone.localize[my_timestamp].astimezone[new_timezone]
4.import datetime import pytz # a timestamp I'd like to convert my_timestamp = datetime.datetime.now[] # create both timezone objects old_timezone = pytz.timezone["US/Eastern"] new_timezone = pytz.timezone["US/Pacific"] # two-step process localized_timestamp = old_timezone.localize[my_timestamp] new_timezone_timestamp = localized_timestamp.astimezone[new_timezone] # or alternatively, as an one-liner new_timezone_timestamp = old_timezone.localize[my_timestamp].astimezone[new_timezone]
Done!
Ví dụ đầy đủ:
import datetime
import pytz
# a timestamp I'd like to convert
my_timestamp = datetime.datetime.now[]
# create both timezone objects
old_timezone = pytz.timezone["US/Eastern"]
new_timezone = pytz.timezone["US/Pacific"]
# two-step process
localized_timestamp = old_timezone.localize[my_timestamp]
new_timezone_timestamp = localized_timestamp.astimezone[new_timezone]
# or alternatively, as an one-liner
new_timezone_timestamp = old_timezone.localize[my_timestamp].astimezone[new_timezone]
Tiền thưởng: Nhưng nếu tất cả những gì bạn cần là thời gian hiện tại trong một múi giờ cụ thể, bạn có thể thuận tiện chuyển thời gian đó trực tiếp vào DateTime.
datetime.datetime.now[new_timezone]
Khi nói đến việc cần chuyển đổi Timezones nói chung, tôi thực sự khuyên bạn nên lưu trữ tất cả các dấu thời gian trong cơ sở dữ liệu của bạn ở UTC, không có quá trình chuyển đổi thời gian tiết kiệm ánh sáng ban ngày [DST]. Và như một thực tiễn tốt, người ta nên luôn chọn bật hỗ trợ múi giờ [ngay cả khi người dùng của bạn đều ở trong một múi giờ!]. Điều này sẽ giúp bạn tránh được vấn đề chuyển đổi DST gây ra rất nhiều phần mềm ngày nay.
Ngoài DST, thời gian trong phần mềm nói chung có thể khá khó khăn. Để hiểu được rằng khó khăn như thế nào khi đối phó với thời gian trong phần mềm nói chung, đây là một nguồn tài nguyên có khả năng khai sáng: //yourcalendricalfallacyis.com
Ngay cả một hoạt động có vẻ đơn giản khi chuyển đổi DateTime/Timestamp thành một ngày có thể trở nên không rõ ràng. Như tài liệu hữu ích này chỉ ra:
Một datetime đại diện cho một thời điểm. Nó tuyệt đối: Nó không phụ thuộc vào bất cứ điều gì. Ngược lại, một ngày là một khái niệm lịch. Nó có một khoảng thời gian mà giới hạn phụ thuộc vào múi giờ mà ngày được xem xét. Như bạn có thể thấy, hai khái niệm này về cơ bản là khác nhau.point in time. It’s absolute: it doesn’t depend on anything. On the contrary, a date is a calendaring concept. It’s a period of time whose bounds depend on the time zone in which the date is considered. As you can see, these two concepts are fundamentally different.
Hiểu được sự khác biệt này là một bước quan trọng để tránh các lỗi dựa trên thời gian. Chúc may mắn.
Hướng dẫn này trình bày cách chuyển đổi múi giờ của đối tượng DateTime sang múi giờ khác như CET, CST, EAT, EST và UTC trong ngôn ngữ lập trình Python.
Bài viết này chứa các phần dưới đây:
Hãy cùng đi sâu vào mã Python!
Nhập mô -đun DateTime & Tạo dữ liệu ví dụ
Bước đầu tiên, chúng tôi phải nhập mô -đun DateTime vào Python:
from datetime import datetime
Để chỉ định các múi giờ khác nhau trong Python, chúng tôi cũng phải tải mô -đun PYTZ:
Bây giờ, chúng ta có thể tạo một đối tượng DateTime với múi giờ UTC bằng cách áp dụng mã Python bên dưới:
my_datetime = datetime[2023, 2, 13, 17, 10, 27, tzinfo = pytz.utc] print[my_datetime] # 2023-02-13 17:10:27+00:00
Chúng tôi cũng có thể định dạng đối tượng DateTime của mình để hiển thị múi giờ bằng hàm strftime:
my_datetime_utc = my_datetime.strftime['%Y-%m-%d %H:%M:%S %Z%z'] print[my_datetime_utc] # 2023-02-13 17:10:27 UTC+0000
Như bạn có thể thấy, ngày và thời gian của chúng tôi là ngày 13 tháng 2 năm 2023 lúc 05:10:27 tối.
Hãy để chuyển đổi ngày và thời gian này sang các múi giờ khác nhau.
Ví dụ 1: Chuyển đổi DateTime thành múi giờ CET
Nếu chúng ta muốn chuyển đổi một đối tượng DateTime sang múi giờ CET, chúng ta có thể sử dụng hàm Astimezone và múi giờ ‘Châu Âu/Berlin, như được hiển thị bên dưới:
my_datetime_cet = my_datetime.astimezone[pytz.timezone['Europe/Berlin']].strftime['%Y-%m-%d %H:%M:%S %Z%z'] print[my_datetime_cet] # 2023-02-13 18:10:27 CET+0100
Ví dụ 2: Chuyển đổi DateTime thành Múi giờ CST
Tương tự như mã Python của ví dụ 1, chúng ta có thể chuyển đổi đối tượng DateTime ví dụ của mình thành CST bằng cách chỉ định ‘chúng ta/trung tâm trong hàm múi giờ:
my_datetime_cst = my_datetime.astimezone[pytz.timezone['US/Central']].strftime['%Y-%m-%d %H:%M:%S %Z%z'] print[my_datetime_cst] # 2023-02-13 11:10:27 CST-0600
Ví dụ 3: Chuyển đổi DateTime thành múi giờ EST
Trong trường hợp chúng tôi muốn chuyển đổi múi giờ của chúng tôi sang EST, chúng tôi phải chỉ định ‘chúng tôi/phương Đông:
my_datetime_est = my_datetime.astimezone[pytz.timezone['US/Eastern']].strftime['%Y-%m-%d %H:%M:%S %Z%z'] print[my_datetime_est] # 2023-02-13 12:10:27 EST-0500
Video, Tài nguyên & Tóm tắt
Bạn có cần giải thích thêm về cách thay đổi múi giờ của các đối tượng DateTime trong Python không? Sau đó, bạn nên xem video sau đây của Kênh YouTube TechnologyCult.
Trong video, loa giải thích cách chuyển đổi các múi giờ bằng gói PYTZ trong Python.
Không đủ? Bạn có thể xem xét một số hướng dẫn khác ở đây trên Quả cầu Thống kê:
- Chuyển đổi thời gian kỷ nguyên sang đối tượng DateTime & ngược lại trong Python
- Làm cho múi giờ Datetime không biết trong Python
- Chuyển đổi DateTime thành Unix Timestamp trong Python
- Chuyển đổi đối tượng DateTime sang múi giờ cục bộ
- Hướng dẫn lập trình Python
Bài đăng này đã chỉ ra cách chuyển đổi các đối tượng DateTime sang các múi giờ khác trong ngôn ngữ lập trình Python.transform datetime objects to other time zones in the Python programming language.
Lưu ý rằng chúng tôi có thể sử dụng mã của hướng dẫn này để chuyển đổi các đối tượng DateTime sang nhiều vùng thời gian khác như AEST, ACST, AFT, AKST, AST, CAT, EET, MSK, MST, PST, WAT và WET. Chúng tôi chỉ đơn giản là phải chỉ định vùng tương ứng trong hàm múi giờ.
Trong trường hợp bạn có thêm câu hỏi, bạn có thể để lại một bình luận bên dưới.
Hướng dẫn này được tạo ra với sự hợp tác của Gottumukkala Sravan Kumar. Xin vui lòng xem trang tác giả Gottumukkala, để có thêm thông tin về nền tảng học tập của anh ấy và các bài báo khác mà anh ấy đã viết cho Quả cầu Thống kê.