我正试图获得纬度和经度坐标的时区,但我有一些问题这些错误可能是非常基本的
我在数据库中有一个表,大约有600行。每行包含世界上某个地方的长坐标我想把这些坐标输入一个函数,然后检索时区。目的是将这600个地方中的每个地方都有本地时间戳的事件转换为UTC时间
我发现了一篇博客文章,其中使用了一段代码从地理坐标派生时区。
当我尝试运行代码时,我得到错误geonames is not defined
。我已经申请了一个geonames的账户。
我想我只是把函数文件保存在错误的目录或简单的东西。有人能帮忙吗?
#-------------------------------------------------------------------------------
# Converts latitude longitude into a time zone
# REF: https://gist.github.com/pamelafox/2288222
# REF: http://blog.pamelafox.org/2012/04/converting-addresses-to-timezones-in.html
#-------------------------------------------------------------------------------
geonames_client = geonames.GeonamesClient('Username_alpha')
geonames_result = geonames_client.find_timezone({'lat': 48.871236, 'lng': 2.77928})
user.timezone = geonames_result['timezoneId']
With tzwhere and pytz:
import datetime
import pytz
from tzwhere import tzwhere
tzwhere = tzwhere.tzwhere()
timezone_str = tzwhere.tzNameAt(37.3880961, -5.9823299) # Seville coordinates
timezone_str
#> Europe/Madrid
timezone = pytz.timezone(timezone_str)
dt = datetime.datetime.now()
timezone.utcoffset(dt)
#> datetime.timedelta(0, 7200)
我能够使用timezonefinder进行适合我目的的查找:
import datetime
import timezonefinder, pytz
tf = timezonefinder.TimezoneFinder()
# From the lat/long, get the tz-database-style time zone name (e.g. 'America/Vancouver') or None
timezone_str = tf.certain_timezone_at(lat=49.2827, lng=-123.1207)
if timezone_str is None:
print("Could not determine the time zone")
else:
# Display the current time in that time zone
timezone = pytz.timezone(timezone_str)
dt = datetime.datetime.utcnow()
print("The time in %s is %s" % (timezone_str, dt + timezone.utcoffset(dt)))
在从其pypi页面链接的文档中有关于timezonefinder方法及其限制的讨论。
timezonefinder
和pytz
可以在同名pip
包中找到
按预期运行:
import geonames
geonames_client = geonames.GeonamesClient('demo')
geonames_result = geonames_client.find_timezone({'lat': 48.871236, 'lng': 2.77928})
print geonames_result['timezoneId']
输出:'Europe/Paris'
import requests
lat = 48.871236 ## your latitude
lon = 2.77928 ## your longitude
url = "http://api.geonames.org/timezoneJSON?formatted=true&lat={}&lng={}&username=demo".format(lat,lon)
r = requests.get(url) ## Make a request
return r.json()['timezoneId'] ## return the timezone