Trong hướng dẫn này, chúng tôi sẽ xác định cách chúng tôi có thể làm việc với các múi giờ khác nhau trong Python. Chúng ta cũng sẽ tìm hiểu về múi giờ địa phương của Python. Múi giờ có thể được mô tả là khu vực địa lý nơi thời gian tiêu chuẩn được quan sát. Hãy giới thiệu ngắn gọn về múi giờ. Chúng tôi sẽ sử dụng thư viện pytz của Python để làm việc với múi giờ
Múi giờ là gì?
Múi giờ được xác định là thời gian tiêu chuẩn tùy thuộc vào đại diện địa lý của địa điểm đó. Nói cách khác, múi giờ đề cập đến giờ địa phương của một khu vực cụ thể dựa trên vòng quay của trái đất. Nó được xác định theo UTC [Giờ phối hợp quốc tế], tiêu chuẩn để phối hợp thời gian dựa trên khu vực của thế giới
Lưu ý - Nên sử dụng UTC làm múi giờ cơ sở của bạn
Ví dụ - UTC ở Singapore là 2. 5 giờ trước Ấn Độ hoặc múi giờ ở miền Bắc và 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 ánh sáng ban ngày. Hãy xem bảng sau đây về các múi giờ khác nhau trên toàn thế giới
Thư viện pytz Python
Python pytz cơ sở dữ liệu Olson tz thành Python và hỗ trợ hầu hết các múi giờ. Mô-đun này cho phép chúng tôi thực hiện các chức năng chuyển đổi ngày-giờ và phục vụ cơ sở quốc tế của khách hàng. Chúng tôi cũng có thể thực hiện các tính toán theo yêu cầu của dự án và chúng tôi cũng có thể tạo các phiên bản datetime nhận biết múi giờ. Nó cũng có thể giải quyết vấn đề thời gian mơ hồ vào cuối ngày
Cài đặt
Chúng tôi cần cài đặt nó trong hệ thống của mình để hoạt động với múi giờ. Chúng ta có thể cài đặt nó bằng lệnh bên dưới
Lệnh trên sẽ cài đặt pytz trên máy của bạn. Nên cài đặt trong môi trường ảo
Python đi kèm với DateTime. lớp cơ sở trừu tượng tzinfo[]. Lớp này cho phép chúng tôi xử lý múi giờ. Nhưng nó không phải là cách tốt để khởi tạo trực tiếp. Để lấy thông tin về múi giờ cụ thể, chúng ta cần tạo lớp con của DateTime. tzinfo[]
Thư viện pytz khắc phục nhược điểm này, nó đã cấy một lớp múi giờ để xử lý phần bù cố định tùy ý từ múi giờ và UTC
Ví dụ - Để lấy thời gian hiện tại trong Python, chúng tôi sử dụng datetime. hàm now[]. Tuy nhiên, phương pháp này không trả về bất kỳ múi giờ nào. Sử dụng múi giờ, chúng ta có thể chuyển múi giờ trong hàm này và nó sẽ trả về ngày giờ hiện tại theo múi giờ đã cho
Thuộc tính pytz
Pytz cung cấp ba thuộc tính và phương thức để làm việc với múi giờ trong Python
- pytz. utc
- pytz. múi giờ ['khu vực']
- pytz. múi giờ[]
Làm thế nào để có được thời gian hiện tại?
Để có được thời gian hiện tại, chúng tôi sử dụng mô-đun thời gian. Chúng ta có thể sử dụng các chức năng sau của mô-đun thời gian
- localtime[]- Nó cho phép lấy giờ địa phương hiện tại
- strftime["%H. %M. %S", t]- nó cho phép xác định định dạng thời gian được sử dụng để hiển thị thời gian
Thí dụ -
đầu ra
The current timezone is: 21:22:41
Chúng tôi nhận được múi giờ hiện tại của khu vực và UTC tiêu chuẩn
Tạo đối tượng Timezone Naïve Datetime
Một đối tượng dữ liệu có thể được xác định có hoặc không có múi giờ trong Python. Đối tượng này còn được gọi là Aware hoặc Naïve. Nếu nó giữ giá trị múi giờ, nó là một nhận thức
Một đối tượng dữ liệu có thể được xác định có hoặc không có múi giờ trong Python. Đối tượng này còn được gọi là Aware hoặc Naïve. Nếu nó giữ giá trị múi giờ, thì nó là một đối tượng Datetime nhận biết;
Hãy hiểu ví dụ sau về việc tạo một đối tượng múi giờ
Thí dụ -
đầu ra
Timezone naive: 2022-05-08 11:38:01.362134 Timezone Aware: 2022-05-08 06:08:01.363137+00:00 US Central DateTime 2022-05-08 01:08:11.323668-05:00
Giải trình -
Trong đoạn mã trên, chúng tôi đã sử dụng pytz. utc làm tham số cho datetime. hàm now[]. Phần bù ở cuối là +0. 00 là độ lệch UTC tiêu chuẩn. Trong một dòng khác, chúng tôi đã sử dụng vùng 'US/Central' để tạo múi giờ. Phần bù ở cuối -05. 00 là phần bù UTC của vùng CDT
Thư viện pytz có nhiều danh sách múi giờ, chúng ta có thể in các múi giờ bằng mã bên dưới
đầu ra
['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC',.............. 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu']
Nhận thời gian hiện tại ở múi giờ khác nhau
Mô-đun pytz cho phép chúng tôi lấy ngày và giờ hiện tại của bất kỳ múi giờ nào bằng phương pháp bên dưới
Cú pháp -
Đầu tiên, chúng ta tạo đối tượng múi giờ bằng pytz. múi giờ ['tên khu vực'], chuyển đối tượng này sang datetime. now[timezone_obj] để lấy ngày giờ hiện tại của múi giờ đã cho
Sử dụng danh sách múi giờ ở trên, chúng ta sẽ nhận được múi giờ hiện tại của các múi giờ khác nhau
Ví dụ 1
đầu ra
US Buenos DateTime: 2022:05:08 03:52:13 -03 -0300 US Adak timezone DateTime: 2022:05:07 21:52:13 HDT -0900 US Eastern timezone DateTime: 2022:05:07 22:52:13 AKDT -0800 US Michigan timezone DateTime: 2022:05:08 02:52:13 EDT -0400 US Belam timezone DateTime: 2022:05:08 03:52:13 -03 -0300
Giải trình -
Trong đoạn mã trên, chúng tôi đã nhận được thời gian hiện tại của các khu vực khác nhau của Mỹ
Ví dụ - 2. Nhận múi giờ của một quốc gia khác
đầu ra
Israel DateTime: 2022:05:08 10:16:46 IDT +0300 Rome DateTime: 2022:05:08 09:16:46 CEST +0200 Amsterdam DateTime: 2022:05:08 09:16:46 CEST +0200 Hongkong DateTime: 2022:05:08 15:16:46 HKT +0800 Jamaica DateTime: 2022:05:08 02:16:46 EST -0500 Turkey: DateTime: 2022:05:08 10:16:46 +03 +0300
Khi chúng tôi chạy mã, nó sẽ trả về múi giờ hiện tại của các quốc gia khác nhau
Nhận thông tin múi giờ bằng tzinfo
Sử dụng Ngày giờ. tzinfo, chúng ta có thể lấy thông tin về ngày hoặc giờ. tzinfo thường có các thông tin sau
- Múi giờ của datetime
- Tiết kiệm ánh sáng ban ngày
- Bù đắp từ UTC
Lớp tzinfo là lớp trừu tượng, lớp này cung cấp các phương thức sau để lấy thông tin múi giờ
- utcoffset[dt] - Nó trả về tổng phần bù từ UTC, đây sẽ là một đối tượng timedelta. Nếu đồng bằng thời gian ở phía đông của UTC, giá trị đồng bằng thời gian sẽ dương. Nếu đồng bằng thời gian ở phía tây của UTC, giá trị đồng bằng thời gian sẽ âm. Múi giờ địa phương có cả giá trị múi giờ và DST. Do đó, phạm vi của đồng bằng thời gian là giữa timedelta giờ=24 đến timedelta[giờ=24]
- tzname[dt] - Phương thức này trả về tên múi giờ tương ứng với đối tượng datetime
- utcoffset[dt] - Phương pháp này được sử dụng để lấy phần bù DST trong các vùng có hiệu lực DST. Nếu DST không có hiệu lực, nó sẽ chỉ trả về timedelta[0]. Thông tin DTC đã là một phần của phần bù UTC
Hãy hiểu ví dụ sau
Ví dụ 1
đầu ra
Europe London DateTime: 2022:05:08 09:12:09 BST +0100 BST 1:00:00 1:00:00
Chuyển đổi giữa các múi giờ
Chúng ta có thể chuyển đổi ngày giờ từ múi giờ này sang múi giờ khác bằng cách sử dụng hàm datetime. phương thức astimezone[]. Phương thức này lấy đối tượng datetime làm tham số và trả về một datetime mới của một múi giờ nhất định. Hãy hiểu ví dụ sau
Thí dụ -
đầu ra
UTC DateTime: 2022:05:08 08:23:21 UTC +0000 US Hawaii DateTime: 2022:05:07 22:23:21 HST -1000 US Mountain DateTime: 2022:05:07 22:23:21 HST -1000 India DateTime: 2022:05:08 13:53:21 IST +0530
Làm việc với các múi giờ địa phương
Trong phần trên, chúng tôi đã đề cập rằng datetime ngây thơ đối với một instance datetime đã biết. Chúng ta có thể chuyển giá trị múi giờ được đặt thành giá trị tiêu chuẩn cục bộ
Mô-đun pytz cung cấp phương thức localize[] được sử dụng để chuyển đổi giờ ngây thơ sang giờ địa phương. Nó nhận các đối số, cụ thể là đối tượng datetime để bản địa hóa và cờ is_dst tùy chọn
tzinfo có phương thức dst[] 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 true
Hãy hiểu ví dụ sau
Thí dụ -
đầu ra
Indian Standard Time:: 2022-05-08 14:28:37 IST+0530 Amsterdam with daylight saving time:: 1997-12-03 02:00:00 CET+0100 Daylight saving time in amsterdam on 3/8/83:: 0:00:00
Ví dụ - 2. Chuyển đổi định dạng UTC sang định dạng IST
đầu ra
________số 8
Sự kết luận
Hướng dẫn này đã trình bày các phương thức thiết yếu của thư viện pytz. Múi giờ đóng vai trò thiết yếu trong phát triển phần mềm/phát triển web và chúng ta đã thảo luận về cách chúng ta có thể lấy múi giờ và múi giờ hiện tại. Hướng dẫn này sẽ giúp bạn làm quen với thư viện pytz và múi giờ