簡體   English   中英

從 python 中的時區名稱獲取 UTC 偏移量

[英]Get UTC offset from time zone name in python

如何從 python 中的時區名稱獲取 UTC 偏移量?

例如:我有Asia/Jerusalem ,我想得到+0200

由於夏令時(夏令時),結果取決於一年中的時間:

import datetime, pytz

datetime.datetime.now(pytz.timezone('Asia/Jerusalem')).strftime('%z')

# returns '+0300' (because 'now' they have DST)


pytz.timezone('Asia/Jerusalem').localize(datetime.datetime(2011,1,1)).strftime('%z')

# returns '+0200' (because in January they didn't have DST)

您是否嘗試過使用pytz項目和utcoffset方法

例如

>>> import datetime
>>> import pytz
>>> pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific'))
>>> pacific_now.utcoffset().total_seconds()/60/60
-7.0

從python datetime對象轉換為UTC時間戳時,我遇到了類似的問題。 我的astimezone是時區不可知的(非常天真),因此時區不起作用。

為了解決這個問題,我讓我的datetime對象時區知道了,然后使用了上面的魔法。

import pytz
system_tz = pytz.timezone(constants.TIME_ZONE)
localized_time = system_tz.localize(time_of_meeting)
fmt = "%Y%m%dT%H%M%S" + 'Z'
return localized_time.astimezone(pytz.utc).strftime(fmt)

這里, constants.TIME_ZONE是我擁有持久對象的默認時區的地方。

希望這有助於嘗試將python datetime對象轉換為UTC的人。 轉換后,請以任何方式格式化。

@Jon Skeet回答的另一個觀點,假設您已經有datetime.datetime object,例如day = datetime.datetime(2021, 4, 24)

import pytz
tz = pytz.timezone("Asia/Kolkata")

import datetime
day = datetime.datetime(2021, 4, 24)

offset = tz.utcoffset(day)/3600

另一種獲取 UTC 偏移量的方法是 integer:

import datetime
import pytz
from tzwhere import tzwhere

tzwhere = tzwhere.tzwhere()
timezone = pytz.timezone('Asia/Jerusalem')
offSet_str = str(timezone.utcoffset(datetime.datetime.now()))
if offSet_str[0] != '-':
    offSet = int(offSet_str[0])
else:
    offSet = int(offSet_str[8] + offSet_str[9]) - 24

print(offSet)

Jon Skeet 有一個更快的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM