Giả sử chúng ta có một đối tượng
Timezone naive: 2021-07-09 13:22:02.2569789 đại diện cho một thời gian cụ thể [theo múi giờ địa phương của máy]
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
>>> import datetime
>>> april_fools = datetime.datetime[2030, 4, 1, 10, 0]
Biến
Timezone naive: 2021-07-09 13:22:02.2569780 đó trỏ đến một đối tượng
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
Timezone naive: 2021-07-09 13:22:02.2569781 đại diện cho 10 giờ sáng hoặc ngày 1 tháng 4 năm 2030 [theo múi giờ địa phương của chúng tôi]
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
Để chuyển đổi thời gian này thành UTC, chúng ta có thể sử dụng phương thức
Timezone naive: 2021-07-09 13:22:02.2569782 trên đối tượng
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
Timezone naive: 2021-07-09 13:22:02.2569789 của mình
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
Nếu chúng ta muốn chuyển đổi thời gian hiện tại sang UTC thì sao?
Trong khi các đối tượng
Timezone naive: 2021-07-09 13:22:02.2569781 của Python có một
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
>>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
Tài liệu Python khuyên bạn nên chuyển múi giờ đích [
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
2 trong trường hợp của chúng tôi] sang múi giờ thay thế Múi giờ biểu thị thời gian chuẩn hóa tùy thuộc vào phần nào của thế giới đang được xem xét
Nói một cách đơn giản, múi giờ đề cập đến giờ địa phương của một khu vực. UTC [Giờ phối hợp quốc tế] là giờ thiên văn dựa trên vòng quay của trái đất, là tiêu chuẩn để phối hợp thời gian dựa trên khu vực của thế giới
Ghi chú. UTC – Giờ phối hợp quốc tế là tiêu chuẩn thời gian chung trên toàn thế giới. Vì vậy, trong Python, để làm việc với múi giờ mà không gặp bất kỳ sự cố nào, bạn nên sử dụng UTC làm múi giờ cơ sở của mình
Ví dụ: CT [Giờ Trung tâm] ở Bắc và Nam Mỹ chậm hơn 5 hoặc 6 giờ và được biểu thị là UTC-5 hoặc UTC-6 dựa trên Tiết kiệm ánh sáng ban ngày. Dưới đây là một vài ví dụ
UTC OffsetLocationsNameLocationUTC +9Nhật Bản, Hàn Quốc và 5 quốc gia khácJSTTokyoUTC +5. 30 IndiaISTẤn Độ UTC +1 Vương quốc Anh và 20 BSTLondonUTC -10Hawaii/USA và 2 HSTHonoluluTimeZones khácPython cung cấp lớp cơ sở trừu tượng
Timezone naive: 2021-07-09 13:22:02.2569787 cung cấp các phương thức để xử lý múi giờ. Nhưng lớp này là một lớp cơ sở trừu tượng và không nên được khởi tạo trực tiếp. Chúng ta cần định nghĩa một lớp con của tzinfo để nắm bắt thông tin về một múi giờ cụ thể
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
Thư viện pytz đã triển khai lớp múi giờ để xử lý các phần bù cố định tùy ý từ UTC và múi giờ. Thư viện này cho phép tính toán múi giờ chính xác và đa nền tảng, đồng thời giải quyết vấn đề về thời gian không rõ ràng vào cuối giờ tiết kiệm ánh sáng ban ngày
pytz là một triển khai cụ thể của lớp cơ sở trừu tượng tzinfo và được sử dụng để tạo các đối tượng datetime nhận biết múi giờ
Ví dụ: Hàm
Timezone naive: 2021-07-09 13:22:02.2569788 trả về ngày giờ địa phương hiện tại mà không có bất kỳ thông tin múi giờ nào. Sử dụng thư viện pytz, chúng ta có thể chuyển tên múi giờ cho hàm này để lấy ngày giờ hiện tại trong múi giờ đã cho
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
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 để làm việc với múi giờ trong Python
Timezone naive: 2021-07-09 13:22:02.256978
9. Nhận múi giờ UTC tiêu chuẩn
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
0. Tạo đối tượng múi giờ của một khu vực cụ thểfrom datetime import datetime import pytz unaware = datetime[2021, 6, 15, 8, 45, 17, 5] print['Timezone naive:', unaware] # Convert unaware Datetime to UTC timezone aware Datetime aware = unaware.replace[tzinfo=pytz.UTC] print[aware]
1. Chuyển đổi thời gian của một múi giờ cụ thể sang múi giờ khácfrom datetime import datetime import pytz unaware = datetime[2021, 6, 15, 8, 45, 17, 5] print['Timezone naive:', unaware] # Convert unaware Datetime to UTC timezone aware Datetime aware = unaware.replace[tzinfo=pytz.UTC] print[aware]
Tạo đối tượng ngày giờ nhận biết múi giờ
Trong Python, một đối tượng ngày có thể được đề cập có hoặc không có múi giờ. Dựa vào đó, một đối tượng được gọi là Naive hoặc Aware. Theo mặc định, một đối tượng ngày là ngây thơ. Một đối tượng ngày giờ hoặc thời gian được biết nếu nó giữ giá trị múi giờ [tz]
Thực hiện theo các bước bên dưới để tạo Đối tượng Datetime nhận biết múi giờ trong Python. –
- Cài đặt mô-đun pytz nếu chưa được cài đặt bằng lệnh
2from datetime import datetime import pytz unaware = datetime[2021, 6, 15, 8, 45, 17, 5] print['Timezone naive:', unaware] # Convert unaware Datetime to UTC timezone aware Datetime aware = unaware.replace[tzinfo=pytz.UTC] print[aware]
- Sử dụng hàm
3 để tạo đối tượng múi giờfrom datetime import datetime import pytz unaware = datetime[2021, 6, 15, 8, 45, 17, 5] print['Timezone naive:', unaware] # Convert unaware Datetime to UTC timezone aware Datetime aware = unaware.replace[tzinfo=pytz.UTC] print[aware]
- Sử dụng hàm
4 hoặcfrom datetime import datetime import pytz unaware = datetime[2021, 6, 15, 8, 45, 17, 5] print['Timezone naive:', unaware] # Convert unaware Datetime to UTC timezone aware Datetime aware = unaware.replace[tzinfo=pytz.UTC] print[aware]
5 để tạo múi giờ nhận biết ngày giờ hiện tạifrom datetime import datetime import pytz unaware = datetime[2021, 6, 15, 8, 45, 17, 5] print['Timezone naive:', unaware] # Convert unaware Datetime to UTC timezone aware Datetime aware = unaware.replace[tzinfo=pytz.UTC] print[aware]
Ví dụ
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
4đầu ra
Timezone naive: 2021-07-09 13:22:02.256978
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
- Để có được thời gian UTC, chúng tôi đã sử dụng
Timezone naive: 2021-07-09 13:22:02.256978
9 làm tham số cho hàm
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00Timezone naive: 2021-07-09 13:22:02.256978
8. Phần bù ở cuối là +00. 00 là độ lệch UTC tiêu chuẩn
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00 - Để có được thời gian của CDT, chúng tôi đã sử dụng vùng 'US/Central' để tạo múi giờ. Phần bù ở cuối là -05. 00 là phần bù UTC của vùng CDT
Tham khảo danh sách tất cả các múi giờ trong Python nếu bạn không biết tên chính xác của múi giờ để tạo ngày và giờ theo đúng múi giờ
Để nhận biết múi giờ ngày giờ cũ/hiện tại, hãy sử dụng đoạn mã sau
________số 8Ghi chú. Phương thức
from datetime import datetime
import pytz
unaware = datetime[2021, 6, 15, 8, 45, 17, 5]
print['Timezone naive:', unaware]
# Convert unaware Datetime to UTC timezone aware Datetime
aware = unaware.replace[tzinfo=pytz.UTC]
print[aware]
8 trả về phiên bản from datetime import datetime
import pytz
unaware = datetime[2021, 6, 15, 8, 45, 17, 5]
print['Timezone naive:', unaware]
# Convert unaware Datetime to UTC timezone aware Datetime
aware = unaware.replace[tzinfo=pytz.UTC]
print[aware]
9 mớiĐịnh dạng UTC DateTime để lấy tên múi giờ
Trích xuất tên múi giờ từ UTC DateTime bằng cách sử dụng định dạng DateTime trong Python. Sử dụng chỉ thị
>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
10 để lấy tên múi giờ>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
1Ghi chú. IST là tên múi giờ
Tạo TimeZone Aware Datetime Object Sử dụng lớp timezone
Hãy xem cách tạo một đối tượng
from datetime import datetime
import pytz
unaware = datetime[2021, 6, 15, 8, 45, 17, 5]
print['Timezone naive:', unaware]
# Convert unaware Datetime to UTC timezone aware Datetime
aware = unaware.replace[tzinfo=pytz.UTC]
print[aware]
9 nhận biết múi giờ mà không cần pytzCác mô-đun datetime có lớp
>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
12, lớp này lại là lớp con của lớp cơ sở trừu tượng >>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
13. Mỗi phiên bản được tạo của lớp múi giờ đại diện cho phần bù của múi giờ từ Giờ phối hợp quốc tế [UTC]Chúng ta có thể tạo một đối tượng
from datetime import datetime
import pytz
unaware = datetime[2021, 6, 15, 8, 45, 17, 5]
print['Timezone naive:', unaware]
# Convert unaware Datetime to UTC timezone aware Datetime
aware = unaware.replace[tzinfo=pytz.UTC]
print[aware]
9 nhận biết UTC bằng cách gán >>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
15cú pháp
>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
8Ở đây
>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
16 đại diện cho sự khác biệt giữa giờ địa phương và UTC [Giờ phối hợp quốc tế]. Nó có thể là một đối tượng đồng bằng thời gian nằm trong khoảng từ giờ=-24 đến +24Ví dụ
>>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
0Ghi chú. chúng tôi đang đặt phần bù UTC bằng cách sử dụng lớp timedelta
>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
17Nhận thời gian hiện tại ở múi giờ khác nhau
Sử dụng mô-đun pytz, chúng tôi có thể nhận được ngày và giờ hiện tại của bất kỳ múi giờ nào
cú pháp
>>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
2bước
- Sử dụng hàm
3 để tạo đối tượng múi giờfrom datetime import datetime import pytz unaware = datetime[2021, 6, 15, 8, 45, 17, 5] print['Timezone naive:', unaware] # Convert unaware Datetime to UTC timezone aware Datetime aware = unaware.replace[tzinfo=pytz.UTC] print[aware]
- Sử dụng hàm
4 để lấy ngày giờ hiện tại của múi giờ đã chofrom datetime import datetime import pytz unaware = datetime[2021, 6, 15, 8, 45, 17, 5] print['Timezone naive:', unaware] # Convert unaware Datetime to UTC timezone aware Datetime aware = unaware.replace[tzinfo=pytz.UTC] print[aware]
Ghi chú. UTC – Giờ phối hợp quốc tế là tiêu chuẩn thời gian chung trên toàn thế giới. Vì vậy, để làm việc với múi giờ mà không gặp bất kỳ sự cố nào, bạn nên sử dụng UTC làm múi giờ cơ sở của mình
Trong ví dụ này, chúng ta sẽ xem cách lấy ngày giờ hiện tại theo các múi giờ sau
Hoa Kỳ. Nhận Ngày và Giờ hiện tại theo Múi giờ sau của Hoa Kỳ
>>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
5đầu ra
>>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
6Múi giờ khác
>>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
7đầu ra
Timezone naive: 2021-07-09 13:22:02.2569780
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
Cũng thấy. Chuyển đổi giữa các múi giờ
Nhận thông tin múi giờ bằng tzinfo
Timezone naive: 2021-07-09 13:22:02.2569787 là một lớp cơ sở trừu tượng chứa thông tin về đối tượng ngày hoặc giờ được truyền cho chúng
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
tzinfo thường chứa các thông tin sau. –
- Tên múi giờ của Datetime
- Bù đắp từ UTC [Giờ phối hợp quốc tế]
- DST [Tiết kiệm ánh sáng ban ngày]
Lớp tzinfo cung cấp phương thức sau để lấy thông tin múi giờ. –
81. Trả về tên múi giờ tương ứng với đối tượng>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc] >>> utc_april_fools datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc] >>> print[utc_april_fools] 2030-04-01 17:00:00+00:00
9from datetime import datetime import pytz unaware = datetime[2021, 6, 15, 8, 45, 17, 5] print['Timezone naive:', unaware] # Convert unaware Datetime to UTC timezone aware Datetime aware = unaware.replace[tzinfo=pytz.UTC] print[aware]
83. Phương thức này trả về tên được sử dụng trong khi tạo đối tượng múi giờ>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc] >>> utc_april_fools datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc] >>> print[utc_april_fools] 2030-04-01 17:00:00+00:00
84. Phương thức này trả về tổng phần bù từ UTC phải là một đối tượng timedelta. Các giá trị của timedelta là dương nếu nó ở phía đông của UTC và âm nếu ở phía tây của UTC. Tổng phần bù bao gồm cả giá trị múi giờ và DST [Tiết kiệm ánh sáng ban ngày]. Do đó, phạm vi của timedelta nằm trong khoảng từ -timedelta[hours=24] đến timedelta[hours=24]>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc] >>> utc_april_fools datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc] >>> print[utc_april_fools] 2030-04-01 17:00:00+00:00
85. Phương thức này trả về độ lệch dst trong các vùng có hiệu lực dst. Trong các trường hợp khác, nó sẽ chỉ trả về>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc] >>> utc_april_fools datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc] >>> print[utc_april_fools] 2030-04-01 17:00:00+00:00
86. Thông tin dst đã là một phần của utcoffset, do đó, t>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc] >>> utc_april_fools datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc] >>> print[utc_april_fools] 2030-04-01 17:00:00+00:00
87 sẽ trả về phần bù tiêu chuẩn của múi giờ bất kể ngày và giờ mà chỉ trên vị trí địa lý>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc] >>> utc_april_fools datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc] >>> print[utc_april_fools] 2030-04-01 17:00:00+00:00
Ví dụ
Timezone naive: 2021-07-09 13:22:02.2569781
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
Mã của chúng tôi tạo ra các thông tin sau
Timezone naive: 2021-07-09 13:22:02.2569782
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
Các mô-đun datetime có lớp
>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
12, lớp này lại là lớp con của lớp cơ sở trừu tượng_______213Chuyển đổi giữa các múi giờ
Sử dụng phương pháp
>>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
00 để chuyển đổi ngày giờ từ múi giờ này sang múi giờ khác. Phương thức này sử dụng một thể hiện của đối tượng datetime và trả về một datetime mới của một múi giờ nhất địnhTimezone naive: 2021-07-09 13:22:02.2569783
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
đầu ra
Timezone naive: 2021-07-09 13:22:02.2569784
Timezone Aware: 2021-07-09 07:52:02.256978+00:00
US Central DateTime 2021-07-09 02:52:02.313026-05:00
Làm việc với các múi giờ địa phương
Ghi chú. Để làm việc với múi giờ mà không gặp bất kỳ sự cố nào, bạn nên sử dụng UTC làm múi giờ cơ sở chứ không phải giờ địa phương
Như đã đề cập, chúng ta có thể chuyển đổi một datetime ngây thơ thành một instance datetime đã biết với giá trị múi giờ được đặt thành giá trị chuẩn hóa cục bộ
Chúng ta có thể làm điều đó với một trong các phương thức của
>>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
01 có tên là >>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
02[]. Phương pháp này được sử dụng để chuyển đổi ngây thơ thành giờ địa phương. Nó chấp nhận hai đối số, cụ thể là đối tượng datetime để bản địa hóa và một cờ >>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
03 tùy chọnCờ này được đặt thành đúng nếu chúng tôi muốn bản địa hóa và thông tin tiết kiệm ánh sáng ban ngày và sai nếu chúng tôi chỉ muốn thời gian bù tiêu chuẩn và sai nếu ngược lại
Như đã đề cập ở trên,
>>> utc_april_fools = april_fools.astimezone[datetime.timezone.utc]
>>> utc_april_fools
datetime.datetime[2030, 4, 1, 17, 0, tzinfo=datetime.timezone.utc]
>>> print[utc_april_fools]
2030-04-01 17:00:00+00:00
13 có một phương thức gọi là >>> datetime.datetime.utcnow[]
datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
05 sẽ trả về thông tin Giờ tiết kiệm ánh sáng ban ngày [DST] nếu cờ được đặt thành đúng