Getting Time Zone from Lat Long Coordinates?
本问题已经有最佳答案,请猛点这里访问。
我正在尝试获取纬度和经度坐标的时区,但我遇到了一些问题
错误可能是非常基本的
我在数据库中有一个表,大约有600行。 每行包含世界某处的lat长坐标
我想将这些坐标提供给一个函数,然后检索时区。 目的是将这600个地点中每个地点都有本地时间戳的事件转换为UTC时间
我发现了一篇博文,它使用一段代码从地理坐标中导出时区。
当我尝试运行代码时,我得到错误
我想我刚刚将函数文件保存在错误的目录或简单的东西中。 谁能帮忙
1 2 3 4 5 6 7 8 9 | #------------------------------------------------------------------------------- # 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'] |
使用tzwhere和pytz:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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进行适合我的目的的查找:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import datetime import timezonefinder, pytz tf = timezonefinder.TimezoneFinder() # 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)) |
讨论了timezonefinder的方法及其对pypi页面的限制。
这按预期工作:
1 2 3 4 | import geonames geonames_client = geonames.GeonamesClient('demo') geonames_result = geonames_client.find_timezone({'lat': 48.871236, 'lng': 2.77928}) print geonames_result['timezoneId'] |
输出:
1 | 'Europe/Paris' |
1 2 3 4 5 6 7 8 | 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 |