Hướng dẫn how do i set utc time zone in python? - làm cách nào để đặt múi giờ utc trong python?

Những gì tôi cần làm

Tôi có một đối tượng DateTime không biết thời gian, mà tôi cần thêm một múi giờ để có thể so sánh nó với các đối tượng DateTime nhận biết thời gian khác. Tôi không muốn chuyển đổi toàn bộ ứng dụng của mình thành Timezone không biết cho trường hợp di sản này.

Những gì tôi đã thử

Đầu tiên, để chứng minh vấn đề:

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import pytz
>>> unaware = datetime.datetime(2011,8,15,8,15,12,0)
>>> unaware
datetime.datetime(2011, 8, 15, 8, 15, 12)
>>> aware = datetime.datetime(2011,8,15,8,15,12,0,pytz.UTC)
>>> aware
datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=)
>>> aware == unaware
Traceback (most recent call last):
  File "", line 1, in 
TypeError: can't compare offset-naive and offset-aware datetimes

Đầu tiên, tôi đã thử astimezone:

>>> unaware.astimezone(pytz.UTC)
Traceback (most recent call last):
  File "", line 1, in 
ValueError: astimezone() cannot be applied to a naive datetime
>>>

Không có gì đáng ngạc nhiên khi thất bại này, vì nó thực sự đang cố gắng chuyển đổi. Thay thế dường như là một lựa chọn tốt hơn (theo cách tôi nhận được giá trị của DateTime.Today () trong Python đó là "Timezone Aware"?):

>>> unaware.replace(tzinfo=pytz.UTC)
datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=)
>>> unaware == aware
Traceback (most recent call last):
  File "", line 1, in 
TypeError: can't compare offset-naive and offset-aware datetimes
>>> 

Nhưng như bạn có thể thấy, thay thế dường như đặt tzinfo, nhưng không làm cho đối tượng nhận thức được. Tôi đã sẵn sàng để quay trở lại với bác sĩ chuỗi đầu vào để có múi giờ trước khi phân tích nó (tôi đang sử dụng DateUtil để phân tích cú pháp, nếu điều đó quan trọng), nhưng điều đó có vẻ vô cùng kludgy.

Ngoài ra, tôi đã thử điều này trong cả Python 2.6 và Python 2.7, với cùng một kết quả.

Định nghĩa bài văn

Tôi đang viết một trình phân tích cú pháp cho một số tệp dữ liệu. Có một định dạng cũ tôi cần hỗ trợ trong đó chuỗi ngày không có chỉ báo múi giờ. Tôi đã sửa được nguồn dữ liệu, nhưng tôi vẫn cần hỗ trợ định dạng dữ liệu kế thừa. Chuyển đổi một lần dữ liệu kế thừa không phải là một lựa chọn cho các lý do BS doanh nghiệp khác nhau. Mặc dù nói chung, tôi không thích ý tưởng mã hóa cứng một thời gian mặc định, trong trường hợp này có vẻ như là lựa chọn tốt nhất. Tôi biết với sự tự tin hợp lý rằng tất cả các dữ liệu kế thừa được đề cập là ở UTC, vì vậy tôi đã sẵn sàng chấp nhận rủi ro mặc định trong trường hợp này.

Trong bài viết này, chúng tôi sẽ thảo luận về cách chuyển đổi DateTime địa phương sang UTC Timezone trong Python.

Giả sử bạn đang ở trong một múi giờ không phải là UTC. Nhưng bạn có một datetime trong timezone địa phương của bạn và bạn muốn chuyển đổi nó thành UTC Timezone. Ví dụ: nếu bạn đang ở châu Á/calcutta múi giờ và dấu thời gian trong múi giờ địa phương của bạn là,

10/21/2021 08:18:19

Bây giờ bạn muốn chuyển đổi nó thành UTC Timezone và kết quả sẽ giống như,

10/21/2021 02:48:19

Trước khi chúng ta bắt đầu xem xét các giải pháp, một điểm quan trọng cần hiểu là các giải pháp này sẽ áp dụng cho tất cả các múi giờ. Điều đó có nghĩa là, bất kể thời gian địa phương của bạn là gì, bạn có thể dễ dàng chuyển đổi DateTime thành định dạng UTC bằng các giải pháp này. Hãy bắt đầu nhìn vào chúng từng cái một.

Chúng tôi sẽ sử dụng mô -đun DateTime cho việc này. Đầu tiên, chúng tôi sẽ tạo một đối tượng DateTime từ một chuỗi. Đối tượng DateTime này sẽ không có múi giờ được liên kết với nó và nó có nghĩa là nó có thể được xem xét là thời gian địa phương. Sau đó, chúng tôi sẽ thay đổi múi giờ của đối tượng DateTime thành UTC bằng cách gọi hàm astimezone () trên đối tượng DateTime.astimezone() function on the datetime object.

Quảng cáo

Hàm astimezone () chấp nhận một thể hiện múi giờ tz như một đối số. Nó trả về một thể hiện DateTime mới theo tham số múi giờ được chỉ định TZ, tức là, nó chuyển đổi thời gian trong cuộc gọi DateTime thành múi giờ được chỉ định và trả về một đối tượng DateTime mới chứa nó.astimezone() function accepts a timezone instance tz as an argument. It returns a new DateTime instance according to the specified time zone parameter tz, i.e., it converts the time in calling datetime to the specified timezone and returns a new datetime object containing it.

Hãy để sử dụng điều này để chuyển đổi thời gian địa phương sang UTC, tức là.

from datetime import datetime
import pytz

dt_str  = "10/21/2021 8:18:19"
format  = "%m/%d/%Y %H:%M:%S"

# Create datetime object in local timezone
local_dt = datetime.strptime(dt_str, format)

print('Datetime in Local Time zone: ', local_dt)

# Convert local datetime to UTC time-zone datetime
dt_utc = local_dt.astimezone(pytz.UTC)

print('Datetime in UTC Time zone: ', dt_utc)

dt_utc_str = dt_utc.strftime(format)

print('Datetime string in UTC Time zone: ', dt_utc_str)

Output:

Datetime in Local Time zone:  2021-10-21 08:18:19
Datetime in UTC Time zone:  2021-10-21 02:48:19+00:00
Datetime string in UTC Time zone:  10/21/2021 02:48:19

Chuyển đổi múi giờ của đối tượng DateTime từ cục bộ sang UTC trong Python

Thay vì chuỗi, nếu bạn đã có đối tượng DateTime với timezone cục bộ (hoặc thời gian null), chúng ta có thể chuyển đổi nó trực tiếp thành đối tượng DateTime bằng thời gian UTC bằng cách sử dụng astimezone ().Ví dụ,

from datetime import datetime
import pytz

# Create datetime object in local timezone
local_dt = datetime(2021, 10, 4, 9, 10, 34, 300030)

print('Datetime in Local Time zone: ', local_dt)


# Convert local datetime to UTC time-zone datetime
dt_utc = local_dt.astimezone(pytz.UTC)

print('Datetime in UTC Time zone: ', dt_utc)

Output:

________số 8

Chuyển đổi giờ địa phương hiện tại sang UTC trong Python

Giả sử chúng ta có một đối tượng DateTime có chứa thời gian hiện tại trong timezone cục bộ và nó có thông tin múi giờ được liên kết với nó.Sử dụng astimezone (), chúng ta có thể chuyển đổi nó thành utc timezone và nhận UTC hiện tại.Đối với điều đó, chúng tôi sẽ chuyển pytz.utc như là đối số cho hàm astimezone ().Ví dụ,astimezone(), we can convert it to UTC timezone and get the current UTC. For that, we will pass the pytz.UTC as argument to astimezone() function. For example,

from datetime import datetime
import pytz

# Get current time in local timezone
local_dt = datetime.now()

print('Current Local Time: ', local_dt)

# Convert local to UTC timezone 
dt_utc = local_dt.astimezone(pytz.UTC)

print('Current time in UTC Time-zone: ', dt_utc)

Output:

>>> unaware.astimezone(pytz.UTC)
Traceback (most recent call last):
  File "", line 1, in 
ValueError: astimezone() cannot be applied to a naive datetime
>>>
0

Summary:

Chúng tôi đã học cách chuyển đổi thời gian địa phương sang UTC Timezone trong Python.