首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过给出国家名称和细分,将协调世界时转换为当地时间

通过给出国家名称和细分,将协调世界时转换为当地时间
EN

Stack Overflow用户
提问于 2015-04-07 16:19:31
回答 2查看 1.8K关注 0票数 1

我有一个cvs文件,其中包括UTC时区的日期时间,格式为: 2014-04-19 03:39:02.000。我用parser.parse来阅读约会时间.我有国家名称和分部。我想根据国家和细分将这些日期-时间数据转换为本地时区.

csv文件内容(UTC):us 2014-04-19 03:39:02.000

本地日期-时间(UTC-6):2014-04-18 21:39:02.000

所以我有一个叫做元素的对象。我想计算本地日期时间。

代码语言:javascript
复制
element.country='us'
element.subdivision='la'
element.date_time_utc=parser.parse(split_line[13].strip())
element.date_time_local
EN

回答 2

Stack Overflow用户

发布于 2015-04-07 20:00:37

若要从给定国家和细分的tz数据库中查找时区,可以尝试使用地理编码器(如geopy )。

代码语言:javascript
复制
#!/usr/bin/env python
from datetime import datetime
import pytz # $ pip install pytz
from geopy import geocoders # $ pip install geopy

# find timezone given country and subdivision
g = geocoders.GoogleV3()
place, (lat, lng) = g.geocode('us/la')
timezone = g.timezone((lat, lng))

# parse rfc3339-like format
utc_dt = datetime.strptime('2014-04-19 03:39:02.000', '%Y-%m-%d %H:%M:%S.%f')

# convert utc to the given timezone
dt = timezone.fromutc(utc_dt)
# -> datetime.datetime(2014, 4, 18, 22, 39, 2,
#        tzinfo=<DstTzInfo 'America/Chicago' CDT-1 day, 19:00:00 DST>)

place被确定为Louisiana, USA (如果'la'代表美国的状态是正确的),因此时间是2014-04-18T22:39:02-05:00 (而不是21:39) -- DST生效(从3月9日到2014年11月2日)。

票数 2
EN

Stack Overflow用户

发布于 2015-04-07 18:10:43

这是ISO 8601格式。

代码语言:javascript
复制
In: dt = dateutil.parser.parse('2014-04-19 03:39:02.0000')
In: dt
Out: datetime.datetime(2014, 4, 19, 3, 39, 2)

In: pytz.timezone('US/Pacific').fromutc(dt)
Out: datetime.datetime(2014, 4, 18, 20, 39, 2, tzinfo=<DstTzInfo 'US/Pacific' PDT-1 day, 17:00:00 DST>)

唯一需要的是将您的“细分”映射到已知的时区。或者地点。

代码语言:javascript
复制
pytz.all_timezones

是你的推荐信。

也可能是http://www.geonames.org/export/web-services.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29496330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档