如何在python中使用utc offset和country name查找本地时间

时间:2011-05-06 14:44:53

标签: python timezone

我有该国家的国家名称和utcoffset 如何使用utcoffset找出该国的当地时间?

5 个答案:

答案 0 :(得分:4)

查看pytz按位置查找时区。也许是这样的:

>>> import pytz, datetime
>>> pytz.country_timezones['de']
['Europe/Berlin']
>>> matching_tzs = [t for t in pytz.country_timezones['de'] if pytz.timezone(t)._utcoffset.total_seconds() == 3600]
>>> datetime.datetime.now(tz=pytz.timezone(matching_tzs[0]))
datetime.datetime(2011, 5, 6, 17, 5, 26, 174828, tzinfo=<DstTzInfo 'Europe/Berlin' CEST+2:00:00 DST>)

答案 1 :(得分:1)

使用时区(作为datetime.now()对象)作为参数调用tzinfo

答案 2 :(得分:1)

一个国家可能跨越几个时区。地点的utc偏移量可能随时间而变化。

给定国家/地区代码和utc偏移量,您可以尝试从当前时间的Olson tz数据库中找到匹配的时区。这是@Mu Mind's answer的变体,它考虑了当前时间(否则某些时区的结果可能会出乎意料):

from datetime import datetime, timedelta
import pytz

country_code, utc_offset = 'de', timedelta(hours=1)

# find matching timezones and print corresponding local time
now_in_utc = datetime.now(pytz.utc)
for zonename in pytz.country_timezones[country_code]:
    tz = pytz.timezone(zonename)
    local_time = now_in_utc.astimezone(tz)
    if tz.utcoffset(local_time) == utc_offset: #NOTE: utc offset depends on time
       print("%s\t%s" % (tz.zone, local_time.strftime("%Y-%m-%d %H:%M:%S %Z%z")))

输出

Europe/Berlin   2013-12-02 20:42:49 CET+0100

答案 3 :(得分:0)

保存当前的TZ环境变量值,然后执行

>>> os.environ['TZ'] = 'US/Eastern'
>>> time.tzset()

对于图书馆来说,无论你使用的时间函数是美国/东部时区,你都可以稍后将其重置为原始时区。

使用示例:

>>> time.strftime('%X %x %Z')
'22:54:11 05/06/11 SGT'
>>> os.environ['TZ'] = 'US/Eastern'
>>> time.strftime('%X %x %Z')
'10:54:30 05/06/11 EDT'

有关示例,请参阅time module文档。

答案 4 :(得分:0)

工作代码

utcoffset='+5:30'
utctime=datetime.datetime.utcnow()      
hr=utcoffset[0:utcoffset.find(':')]
min=utcoffset[utcoffset.find(':')+1:]
datetimeofclient=datetime.timedelta(hours=int(hr),minutes=int(min))