如何通过城市和国家来获取时区?


问题内容

在我的django项目中,我有一个小型酒店数据库,其中包含字段citycountry

我可以timezone通过传递citycountry作为参数来获取那个地方的。

我之所以要这样做,是因为我有一些根据check-in酒店时间和当前时间的差异而起作用的命令
。由于datetime.now()给出的是原始日期时间,因此我无法将其与酒店时间进行比较。

我如何期待解决方案。谢谢 :)


问题答案:

要按城市和国家/地区解析时区,您首先需要获取纬度/经度坐标。有多种方法可以做到这一点,包括各种城市数据库,机场代码或通过反向地理编码地址。

请注意,世界上有些城市的某些部分会观察不同的时区。在这些情况下,您可能会有少量误差。看到这个帖子:2个时区可以用于1个城市吗?

由于您是说要查找特定地点(酒店)的位置,因此最好使用其完整地址对每个地点的确切坐标进行地理编码。为此有很多服务,例如Google在此处提供的服务

然后在这里描述的服务之一中使用坐标:如何使用纬度和经度坐标从某个位置获取时区?

有了时区ID(例如Asia/Seoul或)后America/New_York,您就可以在pytz函数中使用它,如用户falsetru在其答案中所示。

可以 通过提前检查您感兴趣的城市是否已经是时区数据库中定义的城市之一
加快速度。但是,世界上有数千个城市,而不仅仅是那些带有时区ID的主要城市。

其他想法

  • 您可以将GeoDjango此处的时区地图数据一起使用。
  • 您可以查看Django-GeoNames,并查看是否包含GeoNames中的时区。
  • 可能还有其他特定于Django或Python的其他库,而我在搜索Google的5分钟内却没有找到。