Ngày giờ của Python có bao gồm múi giờ không?

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 datetime
tznaive_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+0530
7 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+0530
8 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+0530
9 và cả mô-đun
import datetime
import pytz
import tzlocal
def utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]
def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
0 để 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 datetime
import pytz
import tzlocal
def 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 datetime
import pytz
import tzlocal
def utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]
def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
1 không hoạt động với múi giờ. Đoạn mã dưới đây sẽ thất bại

________số 8

Để 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 datetime
import pytz
import tzlocal
def utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]
def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
2. 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ờ

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
0

Đồ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+0530
9 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 datetime
import pytz
import tzlocal
def utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]
def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
4

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
2

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 datetime
import pytz
import tzlocal
def utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]
def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
5

Nhưng thông tin

import datetime
import pytz
import tzlocal
def utcnow[]:
return pytz.utc.localize[datetime.utcnow[]]
def now[]:
return tzlocal.get_localzone[].localize[datetime.now[]]
4 không được cập nhật khi bạn thao tác ngày giờ

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
5

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+0530
6

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

Datetime có chứa múi giờ không?

Giá trị DateTime xác định một ngày và giờ cụ thể. Nó bao gồm thuộc tính Kind cung cấp thông tin giới hạn về múi giờ của ngày và giờ đó . Giá trị DateTimeKind do thuộc tính Kind trả về cho biết liệu giá trị DateTime có biểu thị giờ địa phương hay không [DateTimeKind.

Làm cách nào để thêm múi giờ vào datetime Python?

Phương pháp 1. Sử dụng hàm astimezone[] .
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ữ

Thời gian của Python có ở UTC không?

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 để lấy ngày dựa trên múi giờ trong Python?

Python cho phép người dùng lấy ngày và giờ hiện tại của bất kỳ múi giờ cụ thể nào. Để làm điều đó, chúng tôi sử dụng thư viện pytz, thư viện này chứa thời gian cho tất cả các múi giờ . Hàm now[] lấy múi giờ làm đầu vào và trả về thời gian theo định hướng múi giờ. Chúng tôi cũng có thể truy cập múi giờ đã đặt thông qua time_now_zone.

Chủ Đề