1ma*_*man 6 python country time timezone city
我有一个庞大的人员数据集及其位置数据.我的一个模块仅通过此数据集ONCE,并在我的数据库中生成一个表,以将位置数据映射到时区.该模块使用geocoders,tzwhere和puts.timezone.之后,每次管理员想要向这些人发送电子邮件时,我的Django应用程序使用该时区映射表来识别每个人的当前时间,并报告管理员是否不是发送电子邮件的好时机.
位置数据包括城市和州或国家/地区名称.
为此,我结合了以下四个库:
from datetime import datetime
from geopy import geocoders
from tzwhere import tzwhere
from pytz import timezone
Run Code Online (Sandbox Code Playgroud)
为了生成时区映射表,我的模块与以下示例代码类似:
g = geocoders.GoogleV3()
tz = tzwhere.tzwhere()
locationList = ["Sackville, Canada", "Romania", "Mannheim, Germany", "New Delhi, India", "Trier, Germany", "Basel, Switzerland", "Bruxelles/Brussel, Belgium"]
for location in locationList:
place, (lat, lng) = g.geocode(location)
timeZoneStr = tz.tzNameAt(lat, lng)
timeZoneObj = timezone(timeZoneStr)
# Store timeZoneObj in the timezone mapping table.
Run Code Online (Sandbox Code Playgroud)
然后,每次管理员想要发送电子邮件时,Django应用程序都会遍历每个人的时区并识别他/她所在地区的当前时间.示例代码如下:
# for each person:
# find the location and timezoneObj data for this person in the database.
now_time = datetime.now(timezoneObj)
print now_time
Run Code Online (Sandbox Code Playgroud)
这是输出:
Sackville, Canada : 2015-06-26 22:00:18.131000-03:00
Romania : 2015-06-27 04:00:18.240000+03:00
Mannheim, Germany : 2015-06-27 03:00:18.371000+02:00
New Delhi, India : 2015-06-27 06:30:18.531000+05:30
Trier, Germany : 2015-06-27 03:00:18.656000+02:00
Basel, Switzerland : 2015-06-27 03:00:18.812000+02:00
Bruxelles/Brussel, Belgium : 2015-06-27 03:00:18.921000+02:00
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来做到这一点?
尝试更多类似的事情
import datetime
import pytz
utc = pytz.utc
utc_dt = datetime.datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
eastern = pytz.timezone('US/Eastern')
loc_dt = utc_dt.astimezone(eastern)
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
loc_dt.strftime(fmt)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3110 次 |
| 最近记录: |