我有一个cvs文件,其格式包括UTC时区的日期时间:2014-04-19 03:39:02.000。我使用parser.parse来读取日期时间。 我有国名和细分。我想根据国家和细分将此日期时间数据转换为本地时区。
csv文件内容(UTC):us la 2014-04-19 03:39:02.000
本案例的本地日期时间(UTC-6):2014-04-18 21:39:02.000
所以我有一个叫做元素的对象。我想计算本地日期时间
element.country='us'
element.subdivision='la'
element.date_time_utc=parser.parse(split_line[13].strip())
element.date_time_local
答案 0 :(得分:2)
要从给定国家/地区和细分的tz数据库中查找时区,您可以尝试使用地理编码器,例如geopy
:
#!/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生效(自2014年3月9日至11月2日)。
答案 1 :(得分:1)
这是ISO 8601格式。
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>)
您唯一需要的是将“细分”映射到已知时区。或位置。
pytz.all_timezones
是您的参考。