Hướng dẫn convert datetime to another timezone python - chuyển đổi datetime sang một múi giờ khác python

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:

  1. 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ụ:

    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) 
    
    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ện
    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) 
    
    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) 
    
    2

  2. 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)
  1. Chuyển đổi thành múi giờ mới bằng cách sử dụng
    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) 
    
    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.

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: http://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ê.

Làm cách nào để chuyển đổi DateTime sang thời gian khác nhau trong Python?

Chúng tôi sẽ sử dụng các thuộc tính và phương thức sau của mô -đun PYTZ để hoạt động với timezone trong Python ...
pytz.utc: Nhận thời gian UTC tiêu chuẩn ..
pytz.timezone ('vùng'): tạo đối tượng múi giờ của một khu vực cụ thể ..
pytz.astimezone (): Chuyển đổi thời gian của một múi giờ cụ thể thành múi giờ khác ..

Làm cách nào để chuyển đổi DateTime thành múi giờ?

Chuyển đổi từ UTC sang một múi giờ được chỉ định.Chúng ta có thể sử dụng timezoneinfo.Phương thức tĩnh ConvertTimeFromUTC trong hoạt động gán (phương thức gọi cũng có thể hoạt động), đặt tham số đầu tiên thành đối tượng DateTime UTC và tham số thứ hai thành đối tượng TimeZoneInfo đại diện cho múi giờ đích.

Làm thế nào để bạn chuyển đổi thời gian UTC sang giờ địa phương ở Python?

Chuyển đổi chuỗi DateTime UTC sang thời gian cục bộ..
Tạo một đối tượng DateTime từ chuỗi thời gian UTC ..
Đối tượng DateTime này sẽ không có múi giờ được liên kết với nó.....
Chuyển đổi múi giờ của đối tượng DateTime thành múi giờ cục bộ bằng cách gọi hàm astimezone () trên đối tượng DateTime ..

Làm thế nào để bạn chuyển đổi DateTime thành UTC?

Phương thức TouniSalTime chuyển đổi giá trị DateTime từ thời gian địa phương sang UTC.Để chuyển đổi thời gian trong múi giờ không địa phương sang UTC, hãy sử dụng timezoneinfo.Phương thức ConvertTimeToutC (DateTime, TimeZoneInfo).Để chuyển đổi thời gian mà Offset từ UTC được biết đến, hãy sử dụng phương thức TouniSaltime.. To convert the time in a non-local time zone to UTC, use the TimeZoneInfo. ConvertTimeToUtc(DateTime, TimeZoneInfo) method. To convert a time whose offset from UTC is known, use the ToUniversalTime method.