Cách dễ nhất trong ngày và giờ Python để xử lý các múi giờ là sử dụng mô-đun pytz. 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. pytz đưa cơ sở dữ liệu Olson tz vào Python. Nó cũng giải quyết vấn đề về thời gian mơ hồ vào cuối giờ tiết kiệm ánh sáng ban ngày, bạn có thể đọc thêm về vấn đề này trong Tham khảo thư viện Python [datetime. tzinfo]
Trước khi sử dụng, bạn sẽ cần cài đặt nó bằng cách sử dụng -
pip install pytz
Phương pháp 1. Sử dụng hàm astimezone[]
Thuật toán [Các bước]
Sau đây là Thuật toán/các bước cần tuân thủ để thực hiện tác vụ mong muốn -
Sử dụng từ khóa nhập, để nhập ngày giờ [Để làm việc với ngày và giờ, Python có một mô-đun gọi là mô-đun datetime]
Sử dụng từ khóa nhập để nhập múi giờ từ mô-đun pytz
Nhập định dạng ngày tháng dưới dạng chuỗi bằng hàm input[] và tạo một biến để lưu trữ
Lấy thời gian hiện tại bằng cách sử dụng datetime. now[] [trả về ngày và giờ địa phương hiện tại] và chuyển hàm timezone[] [lấy múi giờ của một vị trí cụ thể] với múi giờ làm đối số cho nó nói 'UTC'
Định dạng DateTime ở trên bằng cách sử dụng strftime[] và in nó
Chuyển đổi thời gian trên sang múi giờ khác bằng datetime. hàm astimezone[] [Datetime. astimezone[] được sử dụng để sửa đổi các đối tượng của lớp datetime trong mô-đun datetime] bằng cách chuyển một múi giờ mới làm đối số cho nó
Định dạng DateTime đã chuyển đổi ở trên bằng cách sử dụng strftime[] và in nó
Ví dụ
Chương trình sau trả về thời gian hiện tại sau khi được chuyển đổi sang múi giờ khác bằng cách sử dụng hàm astimezone[]−
đầu ra
Khi thực thi, chương trình trên sẽ tạo đầu ra sau -
Current Time in UTC TimeZone: 2022-09-07 04:23:21 UTC+0000 Current Time in Asia/Kolkata TimeZone: 2022-09-07 09:53:21 IST+0530
Phương pháp 2. Sử dụng ngày giờ. hàm now[]
Thuật toán [Các bước]
Sau đây là Thuật toán/các bước cần tuân thủ để thực hiện tác vụ mong muốn -
Sử dụng từ khóa nhập, để nhập ngày giờ [Để làm việc với ngày và giờ, Python có một mô-đun gọi là mô-đun datetime]
Sử dụng từ khóa nhập để nhập múi giờ từ mô-đun pytz
Đặt định dạng ngày giờ dưới dạng chuỗi và lưu trữ nó trong một biến
Lấy múi giờ châu Á/Kolkata tiêu chuẩn bằng cách sử dụng hàm timezone[] [lấy múi giờ của một vị trí cụ thể] của mô-đun pytz bằng cách chuyển múi giờ châu Á/Kolkata làm đối số cho nó và lưu kết quả vào một biến
Nhận múi giờ chuẩn của Hoa Kỳ/Miền Đông bằng cách sử dụng hàm timezone[] của mô-đun pytz bằng cách chuyển múi giờ của Hoa Kỳ/Miền Đông làm đối số cho nó và lưu kết quả vào một biến
Lấy thời gian hiện tại bằng cách sử dụng datetime. now[] [trả về ngày giờ địa phương hiện tại] và chuyển múi giờ đầu tiên ở trên i. e đối tượng múi giờ châu Á/kolkata làm đối số cho nó [Ở đây nó chuyển đổi ngày và giờ hiện tại thành múi giờ châu Á/kolkata]
Sử dụng hàm strftime[] [trả về một chuỗi đại diện cho đối tượng ngày giờ dựa trên mã định dạng] để định dạng đối tượng ngày giờ ở trên và in nó
strftime[format]
Lấy thời gian hiện tại bằng cách sử dụng datetime. now[] và chuyển múi giờ thứ hai ở trên i. e Múi giờ 'US/Eastern' làm đối số cho nó [Ở đây nó chuyển đổi ngày và giờ hiện tại thành múi giờ 'US/Eastern']
Sử dụng hàm strftime[] để định dạng đối tượng datetime ở trên và in ra
Ví dụ
Chương trình sau trả về thời gian hiện tại sau khi được chuyển đổi sang múi giờ khác bằng cách sử dụng hàm astimezone[]−
đầu ra
Khi thực thi, chương trình trên sẽ tạo đầu ra sau -
Original Date & Time: in Asia/Kolkata 2022-09-07 10:00:49 IST+0530 Converted Date & Time: in US/Eastern TimeZone 2022-09-07 00:30:49 EDT-0400
Phần kết luận
Chúng ta đã học cách chuyển đổi ngày và giờ với các múi giờ khác nhau trong Python trong bài viết này. Hàm timedelta[] được sử dụng để lấy đối tượng múi giờ. Chúng tôi đã học cách sử dụng ngày giờ. now[] để lấy ngày giờ hiện tại. Chúng ta cũng đã học cách sử dụng hàm strftime[] để định dạng đối tượng datetime
Múi giờ là một vấn đề khó khăn. DST thậm chí còn là một vấn đề khó khăn hơn. Tôi thấy mình vướng vào các vấn đề và rắc rối khi bắt đầu sử dụng datetime trong Python đúng cách. Vì vậy, tôi quyết định viết một blog để chia sẻ kinh nghiệm của tôi
“Ngây thơ” và “Nhận thức”
Điều đầu tiên cần biết là trong Python có. offset ngây thơ và offset-biết. Bù đắp ngây thơ có nghĩa là ngày giờ không có thông tin múi giờ. Nó có thể rất dễ bị lỗi nếu bạn chưa quen với Python. Nếu bạn trộn một datetime ngây thơ và datetime nhận biết, bạn sẽ gặp lỗi. Và Python không hỗ trợ múi giờ tích hợp, bạn cần sử dụng pytz, một mô-đun để biết thông tin múi giờ
import pytz
from datetime import datetimetznaive_datetime = datetime[2018, 1, 1, 12, 0]
tzaware_datetime = datetime[2018, 1, 1, 12, 0, tzinfo=pytz.utc]# this will raise an error
tznaive_datetime == tzaware_datetime
Để tránh loại sự cố này, bạn sẽ phải đảm bảo rằng các đối tượng ngày giờ của bạn luôn là đối tượng không có giá trị bù hoặc luôn nhận biết được giá trị bù. Nhưng chúng ta không thể tránh xử lý múi giờ, vì vậy cách tốt nhất của tôi là luôn làm việc với ngày giờ nhận biết bù trừ
Python mặc định là datetime ngây thơ.
Current Time in UTC TimeZone: 2022-09-07 04:23:21 UTC+0000 Current Time in Asia/Kolkata TimeZone: 2022-09-07 09:53:21 IST+05307 trả về ngày giờ ngây thơ theo múi giờ địa phương của bạn và
Current Time in UTC TimeZone: 2022-09-07 04:23:21 UTC+0000 Current Time in Asia/Kolkata TimeZone: 2022-09-07 09:53:21 IST+05308 cũng trả về ngày giờ ngây thơ, thậm chí hàm đã chỉ ra múi giờ UTC. Bạn sẽ cần mô-đun
Current Time in UTC TimeZone: 2022-09-07 04:23:21 UTC+0000 Current Time in Asia/Kolkata TimeZone: 2022-09-07 09:53:21 IST+05309 và cả mô-đun
import datetime0 để hoàn thành tốt mọi việc. Dưới đây là cách tôi có được thời gian với múi giờ phù hợp
import pytz
import tzlocaldef utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
import datetime
import pytz
import tzlocaldef utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
Phân tích ngày giờ với múi giờ
Cập nhật. Đây chỉ là một vấn đề trong Python 2
Một điều ngạc nhiên khác là trình phân tích cú pháp python
import datetime1 không hoạt động với múi giờ. Đoạn mã dưới đây sẽ thất bại________số 8
import pytz
import tzlocaldef utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
Để phân tích cú pháp ngày giờ với múi giờ, bạn sẽ cần một mô-đun khác
import datetime2. Mô-đun này cung cấp trình phân tích cú pháp sẽ hoạt động với múi giờ. Bây giờ bạn có thể phân tích ngày giờ với múi giờ
import pytz
import tzlocaldef utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
Current Time in UTC TimeZone: 2022-09-07 04:23:21 UTC+0000 Current Time in Asia/Kolkata TimeZone: 2022-09-07 09:53:21 IST+05300
Đồng hồ bấm giờ và DST
Điều cuối cùng bạn cần cẩn thận khi thao tác với thời gian nhận biết offset.
Current Time in UTC TimeZone: 2022-09-07 04:23:21 UTC+0000 Current Time in Asia/Kolkata TimeZone: 2022-09-07 09:53:21 IST+05309 sẽ giúp bạn biết liệu một ngày có chịu ảnh hưởng của DST hay không bằng cách kiểm tra phương pháp
import datetime4
import pytz
import tzlocaldef utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
Current Time in UTC TimeZone: 2022-09-07 04:23:21 UTC+0000 Current Time in Asia/Kolkata TimeZone: 2022-09-07 09:53:21 IST+05302
Ghi chú. DST cho năm 2017 đã kết thúc vào ngày 5 tháng 11. Vì vậy, bất kỳ ngày nào sau ngày 5 tháng 11 sẽ có
import datetime5
import pytz
import tzlocaldef utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
Nhưng thông tin
import datetime4 không được cập nhật khi bạn thao tác ngày giờ
import pytz
import tzlocaldef utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
Current Time in UTC TimeZone: 2022-09-07 04:23:21 UTC+0000 Current Time in Asia/Kolkata TimeZone: 2022-09-07 09:53:21 IST+05305
Những gì bạn thực sự có thể làm là chuyển đổi trở lại thời gian bù đắp ngây thơ, sau đó áp dụng lệnh delta…
Current Time in UTC TimeZone: 2022-09-07 04:23:21 UTC+0000 Current Time in Asia/Kolkata TimeZone: 2022-09-07 09:53:21 IST+05306
Tóm lược
Làm việc với Datetime trong Python dễ bị lỗi. Là do Python không hỗ trợ tốt datetime và timezone. Bạn sẽ phải sử dụng rất nhiều mô-đun bổ sung. Tuy nhiên, thực sự có một viên đạn bạc, bạn chỉ cần sử dụng mũi tên. Mô-đun này cung cấp một sự thay thế cho mô-đun datetime của python và nó luôn nhận biết được độ lệch và nó cũng giải quyết tất cả các vấn đề mà tôi đã đề cập ở trên. Điều duy nhất tôi có thể lo lắng là việc tích hợp với các ứng dụng bên ngoài khác như Spark