我正在使用Flask创建一个网站,并希望在不同的城市显示一个活着的时钟。 我在每个城市的数据库中都存储了经度和纬度。 使用geonames插件,我可以通过坐标获得时区。
示例:
import geonames
geonames_client = geonames.GeonamesClient('demo')
geonames_result = geonames_client.find_timezone({'lat': 48.871236, 'lng': 2.77928})
print geonames_result['timezoneId']
输出:
'欧/巴黎'
如何在我的页面上显示实时时钟?
示例:
该市当前时间:12:59
UPD: 通过@Matt来了解如何通过javascript知道时区来显示实时时间:
<script type='text/javascript'>
function update() {
$('#clock').html(moment().tz("{{timezone}}").format('H:mm:ss'));
}
setInterval(update, 1000);
</script>
现在,我有另一个问题 - 我无法通过coordinates.Line&#34; geonames.GeonamesClient(&#39;用户名&#39;)&#34;获取时区ID。由于某种原因不起作用。我从我的数据库中读取了结果[&#39; Lat&#39;]和结果[&#39; Lng&#39;]。
import geonames
try:
location = {}
location['lat'] = result['Lat']
location['lng'] = result['Lng']
geonames_client = geonames.GeonamesClient('username')
print "test"
geonames_result = geonames_client.find_timezone(location)
print geonames_result['timezoneId']
result['Timezone'] = geonames_result['timezoneId']
except:
result['Timezone'] = 'America/Los_Angeles'
所以,我经常得到除了值。
我正在使用Flask + virtualenv + uwsgi + Nginx
UPD2: 我设法做到了。我正在读取城市和城市时区的mysql数据库lat和lng,如果没有指定时区 - 我向geonames.org发出请求并通过long和lat获取时区ID并将其写入我的数据库,所以我不需要下次请求。然后我将时区ID发送到Jinja2模板。并使用moment.js和moment-timezone显示城市中的当前时间。您可以看到更新的页面(首先清除缓存):[link] test.fantazia-svit.com.ua/city/9
为了从地名中获取时区,我使用了这个函数:
import urllib
import json
try:
url = "http://api.geonames.org/timezoneJSON?lat=%s&lng=%s&username=%s" % (Lat, Lng, username)
response = urllib.urlopen(url);
data = json.loads(response.read())
Timezone = data['timezoneId']
except:
Timezone = ''
其中Lat =您的纬度,Lng =经度和用户名=您在genomes.org中的用户名
答案 0 :(得分:2)
通过@Matt来了解如何通过javascript显示知道时区的实时时间:
<script src="moment.js"></script>
<script src="moment-timezone-with-data-2010-2020.js"></script>
<script type='text/javascript'>
function update() {
$('#clock').html(moment().tz("{{timezone}}").format('H:mm:ss'));
}
setInterval(update, 1000);
</script>
对于后端。我正在读取城市和城市时区的mysql数据库lat和lng,如果没有指定时区 - 我向geonames.org发出请求并通过long和lat获取时区ID并将其写入我的数据库,所以我不知道下次需要请求。然后我将时区ID发送到Jinja2模板。并使用moment.js和moment-timezone显示城市中的当前时间。您可以看到更新的页面(首先清除缓存):http://test.fantazia-svit.com.ua/city/9
为了从地名中获取时区,我使用了这个函数:
import urllib
import json
try:
url = "http://api.geonames.org/timezoneJSON?lat=%s&lng=%s&username=%s" % (Lat, Lng, username)
response = urllib.urlopen(url);
data = json.loads(response.read())
Timezone = data['timezoneId']
except:
Timezone = ''
其中Lat =您的纬度,Lng =经度和用户名=您在gonames.org和Timezone中的用户名 - 是您在前端插入的时区ID