城市和州或国家/地区的 Python 当前时间

Posted

技术标签:

【中文标题】城市和州或国家/地区的 Python 当前时间【英文标题】:Python Current Time in a City and State, or Country 【发布时间】:2015-09-14 01:18:47 【问题描述】:

我有一个庞大的人员数据集,其中包含他们的位置数据。我的一个模块只遍历这个数据集一次,并在我的数据库中生成一个表来将位置数据映射到时区。该模块使用地理编码器、tzwhere 和 puts.timezone。之后,每当管理员想向这些人发送电子邮件时,我的 Django 应用程序都会使用该时区映射表来识别每个人的当前时间,并在不是给他们发送电子邮件的好时机时向管理员报告。

位置数据包括城市和州或国家/地区名称。

为此,我结合了以下四个库:

from datetime import datetime
from geopy import geocoders
from tzwhere import tzwhere
from pytz import timezone

为了生成时区映射表,我的模块与下面的示例代码做了类似的事情:

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.

然后,每次管理员想要发送电子邮件时,Django 应用程序都会遍历每个人的时区并确定他/她所在地区的当前时间。示例代码如下:

# for each person:
    # find the location and timezoneObj data for this person in the database.
    now_time = datetime.now(timezoneObj)
    print now_time

这是输出:

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

有没有更有效的方法来做到这一点?

【问题讨论】:

你知道locationlist是什么提前吗? 是的。我有一个包含所有位置数据的 csv 文件,但不幸的是,位置数据不是标准的。正如您在示例中看到的,其中一些是城市和州,而其他只是国家名称。如果是国名,它们通常是小国。我手动检查过,我很确定就国家而言,它们内部没有多个时区。 相关:Get Timezone from City in Python/Django 如果你提前知道名单;为什么不存储结果位置 -> 时区映射呢? 塞巴斯蒂安,你是完全正确的。此示例代码不代表我的确切代码。我要修改它。实际上,我有一个庞大的人员数据集及其位置。我的一个模块只遍历这个数据集一次,并在我的数据库中生成一个表来将位置数据映射到时区。该模块使用地理编码器、tzwhere 和 puts.timezone。之后,每当管理员想向这些人发送电子邮件时,我的 Django 应用程序都会使用该映射表来识别每个人的当前时间,并在不是发送邮件的好时机时向管理员报告。 【参考方案1】:

尝试更多类似的东西

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)

【讨论】:

我真的不明白你在这段代码中的意思。我正在尝试查找某个城市或国家/地区的当前时间。

以上是关于城市和州或国家/地区的 Python 当前时间的主要内容,如果未能解决你的问题,请参考以下文章

从 CLGeocoder 获取当前城市和国家?

Google Api 了解您当前的国家或当前国家/地区代码

如何用街道、城市和国家显示手机的当前位置

当前分配给每个国家/城市/组织的 IPv4 块 [关闭]

获取iOS时区中的城市和国家/地区列表

如何在ios中获取州,国家/地区列表