Giả sử chúng ta có một đối tượng
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
05 đại diện cho một thời điểm cụ thể [theo múi giờ địa phương của máy]>>> import datetime
>>> april_fools = datetime.datetime[2030, 4, 1, 10, 0]
Biến
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
06 đó trỏ đến một đối tượng >>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
07 đạ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]>>> 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
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
08 trên đối tượng >>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
05 của mình>>> 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
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
07 của Python có một>>> 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ẹo nhanh ngắn này phục vụ nhiều hơn như một lời nhắc nhở cho bản thân tôi. Tôi biết tôi không chỉ nói cho bản thân mình khi tôi nói việc chuyển đổi ngày và giờ giữa các múi giờ có thể thực sự khiến bạn đau đầu. Đây là bản tóm tắt nhanh về xử lý chuyển đổi múi giờ với các đối tượng datetime trong Python
Bài viết nhanh này sẽ mô tả
- Hiểu múi giờ nhận biết và không nhận biết múi giờ
- Chỉ định tại múi giờ
- Chuyển đổi sang múi giờ khác
Chúng ta sẽ cần hai thư viện Python cho việc này, pytz và Python's datetime
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
11>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
12- Trả về một đối tượng ngày giờ trong múi giờ hiện tại của bạn, nhưng nó không nhận biết múi giờ>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
13 —Trả về một đối tượng datetime theo múi giờ utc, nhưng NGẠC NHIÊN, nó không nhận biết múi giờNếu bạn muốn chuyển đổi bất kỳ ngày giờ nào từ múi giờ này sang múi giờ khác, trước tiên chúng ta cần biết múi giờ ban đầu và gán nó cho đối tượng datetime
Trong ví dụ trên, chúng tôi biết
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
14 là UTC, nhưng nó không nhận biết múi giờ. Chúng ta phải chỉ định một múi giờ. Trong dự án của bạn, có thể bạn đã quyết định lưu tất cả các múi giờ của mình vào múi giờ địa phương. Nói chung, nên luôn lưu trong UTCChỉ định múi giờ
Hãy mang Pytz vào
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
15Để xem tất cả các múi giờ mà Pytz có,
for tz in pytz.all_timezones:
print[tz]
Hãy chỉ định múi giờ cho
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
14 từ trước đó>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
17Trong thiết bị đầu cuối và gõ
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
14, bạn sẽ thấy,datetime.datetime[2020, 5, 13, 8, 39, 29, 220134, tzinfo=]
Nếu chúng ta
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
192020–05–13 08. 39. 07. 109762+00. 00
Chúng tôi biết múi giờ
Chuyển đổi giữa các múi giờ
Bây giờ, nếu chúng ta muốn chuyển đổi giữa các múi giờ, các đối tượng
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
110 có hàm >>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
111 hữu íchGiả sử tôi muốn chuyển đổi sang múi giờ của Brisbane [ở Úc] [tôi làm việc với một khách hàng ở Úc, nơi đã truyền cảm hứng cho bài viết này]
brisbane = utcnow. múi giờ astime[pytz. múi giờ[“Úc/Brisbane”]]
Nếu bây giờ chúng ta gõ
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
112,datetime.datetime[2020, 5, 13, 18, 11, 14, 960814, tzinfo=]
Nếu chúng tôi
>>> april_fools
datetime.datetime[2030, 4, 1, 10, 0]
113 nó2020–05–13 18. 11. 14. 960814+10. 00
Tóm lược- Biết múi giờ bạn đang làm việc
- Chỉ định múi giờ cho đối tượng datetime của bạn nếu nó không biết với
114>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
- Sử dụng
115 để chuyển đổi sang múi giờ khác>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Thời gian hạnh phúc, chuyển đổi hạnh phúc
Nếu bạn thấy hướng dẫn này hữu ích, tôi sử dụng Twitter để đăng thêm các bài học về tự động hóa sẽ giúp bạn tiết kiệm thời gian và phát triển doanh nghiệp của mình. Bạn có thể theo dõi tôi tại đây
Dữ liệu có thể được biểu diễn dưới nhiều dạng khác nhau - và một cách thuận tiện để biểu thị ngày và giờ là các chuỗi. Tuy nhiên, để làm việc với những ngày và giờ này theo kiểu số học [chẳng hạn như tính chênh lệch múi giờ, thêm hoặc bớt thời gian, v.v. ] - chúng ta cần chuyển đổi chúng thành đối tượng
8Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Một trong những nguồn phổ biến nhất của thời gian biểu định dạng chuỗi là các API REST trả về các chuỗi bất khả tri, sau đó chúng ta có thể chuyển đổi sang các định dạng khác
Ngoài ra - múi giờ là một vấn đề đau đầu phổ biến khi làm việc với các đối tượng ngày giờ, vì vậy chúng ta cũng cần phải suy nghĩ về điều đó trong khi chuyển đổi
Trong hướng dẫn này - chúng ta sẽ xem xét cách chuyển đổi ngày/giờ chuỗi thành đối tượng
8 trong Python, sử dụng mô-đunDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
8 tích hợp, cũng như các mô-đun của bên thứ ba nhưDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
1,import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
2 và Maya, chiếmimport datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
Mô-đun datetime bao gồm ba loại đối tượng khác nhau.
3,import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
4 vàimport datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
8. Đối tượngDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
3 giữ ngày,import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
4 giữ thời gian vàimport datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
8 giữ cả ngày và giờDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
7>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Chạy mã này sẽ dẫn đến
8>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Khi không có định dạng tùy chỉnh nào được cung cấp, định dạng chuỗi mặc định được sử dụng, tôi. e. định dạng cho "2022-12-01 10. 27. 03. 929149" ở định dạng ISO 8601 [YYYY-MM-DDTHH. MM. SS. mmmmmm]. Nếu chuỗi đầu vào của chúng tôi để tạo một đối tượng
8 có cùng định dạng ISO 8601 hoặc nếu bạn biết trước định dạng mà bạn sẽ nhận được, thì chúng tôi có thể dễ dàng phân tích cú pháp đó thành đối tượngDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
8Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Chạy nó sẽ in ngày, giờ và ngày giờ
Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Ở đây, chúng tôi sử dụng phương pháp
21, chấp nhận hai đối số>>> 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
- Ngày định dạng chuỗi
- Định dạng của đối số đầu tiên
Việc chỉ định định dạng như thế này giúp quá trình phân tích cú pháp nhanh hơn nhiều vì
8 không cần phải thử và tự giải thích định dạng, điều này tốn kém hơn nhiều về mặt tính toán. Giá trị trả về thuộc loạiDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
8Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Trong ví dụ của chúng tôi,
24 là chuỗi đầu vào 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
25 là định dạng của chuỗi ngày của chúng tôi. Giá trị>>> 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 được trả về được lưu dưới dạngDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
27>>> 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ì đây là một đối tượng
8, chúng ta có thể gọi trực tiếp các phương thứcDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
29 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
10 trên nó. Như bạn có thể thấy từ đầu ra, nó in phần 'ngày' và 'thời gian' của chuỗi đầu vào>>> datetime.datetime.utcnow[] datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
Định dạng mã thông báo
Bạn nên dành một chút thời gian để hiểu các mã thông báo định dạng -
25 từ trước đó>>> 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
Mỗi mã thông báo đại diện cho một phần khác nhau của thời gian ngày, như ngày, tháng, năm, ngày trong tháng hoặc tuần, v.v. Đủ rộng để cho phép định dạng khác nhau. Một số cái thường được sử dụng, mà chúng tôi cũng đã sử dụng trước đó là
12. Năm [4 chữ số]>>> datetime.datetime.utcnow[] datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
13. Tháng>>> datetime.datetime.utcnow[] datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
14. ngày trong tháng>>> datetime.datetime.utcnow[] datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
15. Giờ [24 giờ]>>> datetime.datetime.utcnow[] datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
16. Phút>>> datetime.datetime.utcnow[] datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
17. giây>>> datetime.datetime.utcnow[] datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
18. Micro giây>>> datetime.datetime.utcnow[] datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
Ghi chú. Tất cả các mã thông báo này, ngoại trừ năm, dự kiến sẽ không được đệm [tôi. e. Tháng 8 là tháng thứ 8 và không được đệm thành
19]>>> datetime.datetime.utcnow[] datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
Nếu định dạng của một chuỗi đã biết, nó có thể dễ dàng được phân tích cú pháp thành một đối tượng
8 bằng cách sử dụngDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
21. Chúng ta hãy xem một ví dụ không tầm thường dịch từ định dạng này sang định dạng khác>>> 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
import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
Chuỗi đầu vào có một định dạng - "Jul 17 2022 9. 20 giờ sáng". Khi biết định dạng này, chúng tôi đã ánh xạ các phần tử cấu thành sang định dạng ISO 8601 và chuyển đổi nó thành đối tượng
8Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
2>>> 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
Dưới đây là danh sách ngắn các mốc thời gian định dạng chuỗi phổ biến và các định dạng tương ứng của chúng cho
21>>> 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
1>>> datetime.datetime.utcnow[] datetime.datetime[2030, 4, 1, 8, 15, 59, 89013]
Bạn có thể phân tích cú pháp chuỗi ngày-giờ ở bất kỳ định dạng nào - miễn là bạn sử dụng đúng chuỗi mã thông báo định dạng cho đầu vào mà bạn đang nhận
Xử lý ngày giờ trở nên phức tạp hơn trong khi xử lý múi giờ. Tất cả các ví dụ trên cho đến nay đều ngây thơ với múi giờ. Chúng được gọi là đối tượng datetime ngây thơ
Tuy nhiên, các đối tượng
8 chứa một trường chính xác để lưu trữ dữ liệu liên quan đến múi giờ -Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
95>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Trường
95 có nghĩa là một đối tượng>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
97, biểu thị thông tin múi giờ. Đó là>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
98 theo mặc định và biểu thị rằng đối tượng datetime không có múi giờ. Một thư viện bên ngoài rất phổ biến để xử lý các múi giờ là>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
99. Bạn cũng có thể đặt các đối tượng PyTz làm trường>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
95>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Nếu bạn chưa có - hãy cài đặt qua
9>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Sử dụng PyTz, chúng tôi có thể tạo một mỏ neo cho thời gian biểu nhận biết múi giờ, chẳng hạn như UTC
for tz in pytz.all_timezones:
6
print[tz]đầu ra
for tz in pytz.all_timezones:
7
print[tz]Bây giờ không còn là 11 giờ sáng mà là 2 giờ sáng, vì chúng tôi đã đặt múi giờ cách đây vài giờ. Điều này thay đổi múi giờ của datetime
for tz in pytz.all_timezones:
61 là sự khác biệt giữa thời gian hiển thị và thời gian UTC với tư cách là điểm neo điều phối toàn cầu. Chúng tôi đã đặt thời gian ở UTC, vì vậy phần bù là
print[tz]for tz in pytz.all_timezones:
62. Đây là một đối tượng nhận biết múi giờ
print[tz]Tương tự, chúng ta có thể chuyển đổi cách hiểu của cùng một ngày giờ giữa các múi giờ. Hãy chuyển đổi một chuỗi, chẳng hạn như "2022-06-29 17. 08. 00" thành một ngày giờ và sau đó bản địa hóa nó thành múi giờ "America/New_York"
0Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Ghi chú. Bản địa hóa biến một ngày giờ không có múi giờ thành một ngày giờ nhận biết múi giờ và coi múi giờ là múi giờ cục bộ. Do đó, ngày giờ vẫn giữ nguyên, nhưng với múi giờ khác, nó không còn đại diện cho cùng một thời điểm không bị ràng buộc từ các múi giờ
Chúng tôi nhận được cùng một giá trị ngày giờ, bù đắp bằng -04. 00 so với thời gian UTC
80>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
17. 08 ở Tokyo không cùng thời điểm với 17. 08 ở New York. 17. 08 ở Tokyo là 3. 08 ở New York
Làm cách nào để tìm tất cả các mã/bí danh múi giờ?
Để tìm tất cả các múi giờ có sẵn, hãy kiểm tra trường
for tz in pytz.all_timezones:
63, đây là danh sách tất cả các múi giờ có sẵn
print[tz]81>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó
82>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Chúng ta có thể chuyển đổi múi giờ của một đối tượng
8 nhận biết múi giờ từ vùng này sang vùng khác, thay vì bản địa hóa một ngày giờ ngây thơ theo múi giờ thông qua lăng kính của một số múi giờDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Điều này khác với bản địa hóa, vì bản địa hóa biểu thị một thời điểm khác, nhưng việc chuyển đổi múi giờ của một đối tượng biểu thị cùng một thời điểm, thông qua một lăng kính khác
83>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Đầu tiên, chúng tôi đã tạo một đối tượng datetime với thời gian hiện tại và đặt nó làm múi giờ "America/New_York". Sau đó, sử dụng phương pháp
for tz in pytz.all_timezones:
65, chúng tôi đã chuyển đổi múi giờ
print[tz]8 này thành "Châu Âu/London". Cả haiDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
8 sẽ in các giá trị khác nhau, sử dụng phần bù UTC làm liên kết tham chiếu giữa chúngDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
84>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
2. 24 ngày hôm sau ở Luân Đôn là cùng thời điểm với 21. 24 ngày hôm trước ở New York vì London đi trước 5 giờ
Đúng như dự đoán, ngày giờ khác nhau vì chúng cách nhau khoảng 5 giờ
Mô-đun ________ 68 của Python có thể chuyển đổi tất cả các loại chuỗi khác nhau thành đối tượng ________ 68. Nhưng vấn đề chính là để làm được điều này bạn cần tạo chuỗi mã định dạng phù hợp mà
21 có thể hiểu được. Tạo chuỗi này mất thời gian và khiến mã khó đọc hơ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
Thay vào đó, chúng ta có thể sử dụng các thư viện của bên thứ ba khác để dễ dàng hơn
Trong một số trường hợp, các thư viện của bên thứ ba này cũng có hỗ trợ tích hợp sẵn tốt hơn để thao tác và so sánh thời gian ngày tháng và một số thư viện thậm chí còn tích hợp múi giờ, vì vậy bạn không cần phải thêm gói PyTz bổ sung
Chúng ta hãy xem xét một số thư viện trong các phần sau
Mô-đun dateutil là phần mở rộng của mô-đun
8. Một lợi thế là chúng ta không cần chuyển bất kỳ mã phân tích cú pháp nào để phân tích chuỗiDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Để tự động chuyển đổi một chuỗi thành datetime mà không cần mã thông báo định dạng bằng Python's
1import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
85>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Hàm
for tz in pytz.all_timezones:
73 này sẽ tự động phân tích cú pháp chuỗi. Bạn không cần phải bao gồm bất kỳ chuỗi định dạng nào. Hãy thử phân tích các loại chuỗi khác nhau bằng cách sử dụng
print[tz]1import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
86>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
đầu ra
87>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Bạn có thể thấy rằng hầu hết mọi loại chuỗi đều có thể được phân tích cú pháp dễ dàng bằng cách sử dụng mô-đun
1import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
Mặc dù điều này thuận tiện, nhưng hãy nhớ lại từ trước rằng việc phải dự đoán định dạng làm cho mã chậm hơn nhiều, vì vậy nếu mã của bạn yêu cầu hiệu suất cao thì đây có thể không phải là cách tiếp cận phù hợp cho ứng dụng của bạn
Maya cũng giúp dễ dàng phân tích chuỗi và thay đổi múi giờ. Để dễ dàng chuyển đổi một chuỗi bằng Python's Maya
88>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
đầu ra
89>>> april_fools datetime.datetime[2030, 4, 1, 10, 0]
Để chuyển đổi thời gian sang múi giờ khác
0Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
đầu ra
1Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Bây giờ không phải là dễ sử dụng?
đầu ra
2Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Như bạn có thể thấy, tất cả các định dạng ngày đã được phân tích cú pháp thành công
Nếu chúng tôi không cung cấp thông tin múi giờ thì nó sẽ tự động chuyển đổi thành UTC. Vì vậy, điều quan trọng cần lưu ý là chúng tôi phải cung cấp thông số
for tz in pytz.all_timezones:
78 và
print[tz]for tz in pytz.all_timezones:
79 nếu thời gian không ở UTC
print[tz]Mũi tên là một thư viện khác để xử lý ngày giờ trong Python. Và giống như trước đây với
for tz in pytz.all_timezones:
76, nó cũng tự động tìm ra định dạng ngày giờ. Sau khi được giải thích, nó trả về một đối tượng Python
print[tz]8 từ đối tượngDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
2import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
Để dễ dàng chuyển đổi một chuỗi thành datetime bằng Python's
2import datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
3Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
đầu ra
4Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Và đây là cách bạn có thể sử dụng
2 để chuyển đổi múi giờ bằng phương phápimport datetime date_time_str = 'Jul 17 2022 9:20AM' date_time_obj = datetime.datetime.strptime[date_time_str, '%b %d %Y %I:%M%p'] print['Date:', date_time_obj.date[]] print['Time:', date_time_obj.time[]] print['Date-time:', date_time_obj]
05Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
5Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
đầu ra
6Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Như bạn có thể thấy chuỗi ngày giờ được chuyển đổi thành vùng "America/New_York"
Bây giờ, hãy sử dụng lại cùng một bộ chuỗi mà chúng ta đã sử dụng ở trên
Mã này sẽ không thành công đối với các chuỗi ngày giờ đã được nhận xét, chiếm hơn một nửa số ví dụ của chúng tôi. Đầu ra cho các chuỗi khác sẽ là
7Date: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Để phân tích cú pháp chính xác các chuỗi ngày-giờ được nhận xét, bạn cần chuyển các mã thông báo định dạng tương ứng để cung cấp manh mối cho thư viện về cách phân tích cú pháp đó
Phần kết luận
Trong bài viết này, chúng tôi đã chỉ ra các cách khác nhau để phân tích chuỗi thành đối tượng
8 trong Python. Bạn có thể chọn thư viện PythonDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
8 mặc định hoặc bất kỳ thư viện bên thứ ba nào được đề cập trong bài viết này, trong số nhiều thư viện khácDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Vấn đề chính với gói
8 mặc định là chúng ta cần chỉ định mã phân tích theo cách thủ công cho hầu hết các định dạng chuỗi ngày-giờ. Vì vậy, nếu định dạng chuỗi của bạn thay đổi trong tương lai, bạn cũng sẽ phải thay đổi mã của mình. Nhưng nhiều thư viện của bên thứ ba, như những thư viện được đề cập ở đây, tự động xử lýDate: 2022-12-01 Time: 10:27:03.929149 Date-time: 2022-12-01 10:27:03.929149
Một vấn đề nữa mà chúng tôi gặp phải là xử lý các múi giờ. Cách tốt nhất để xử lý chúng là luôn lưu trữ thời gian trong cơ sở dữ liệu của bạn ở định dạng UTC và sau đó chuyển đổi nó thành múi giờ địa phương của người dùng khi cần
Các thư viện này không chỉ tốt cho việc phân tích chuỗi mà còn có thể được sử dụng cho nhiều loại hoạt động liên quan đến ngày giờ khác nhau. Tôi khuyến khích bạn xem qua các tài liệu để tìm hiểu chi tiết các chức năng
Làm cách nào để chuyển đổi múi giờ datetime Python?
Để chuyển đổi đối tượng DateTime từ múi giờ này sang múi giờ khác, chúng ta cần sử dụng phương thức astimezone[] .Làm cách nào để chuyển đổi múi giờ thành UTC trong Python?
Bạn có thể sử dụng mô-đun ngày giờ để chuyển đổi ngày giờ thành dấu thời gian UTC trong Python . Nếu bạn đã có đối tượng datetime trong UTC, bạn có thể timestamp[] để lấy dấu thời gian UTC. Hàm này trả về thời gian kể từ epoch cho đối tượng datetime đó.Làm cách nào để chuyển đổi chuỗi có múi giờ thành ngày giờ trong Python?
Để chuyển đổi chuỗi thời gian thành đối tượng ngày giờ, datetime. hàm strptime[] của mô-đun datetime được sử dụng . Hàm này trả về đối tượng datetime.Làm cách nào để chuyển đổi chuỗi thành ngày giờ UTC trong Python?
Để chuyển đổi một chuỗi thành đối tượng ngày giờ, chúng ta có thể sử dụng hàm strptime[] của mô-đun ngày giờ . Ví dụ: bạn có thể cần chuyển đổi một chuỗi số như 13-05-2021 thành đối tượng ngày giờ. hoặc bạn muốn chuyển đổi chuỗi đại diện cho các ngày như Thứ Hai, ngày 13 tháng 5 năm 2021 thành đối tượng ngày giờ.