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

时间:2013-07-28 17:39:35

标签: python django timezone pytz

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

我可以通过传递timezonecity作为参数来获取该地点的country

我想这样做的原因是因为我有一些命令可以根据酒店check-in时间的差异以及现在的时间来实现。由于datetime.now()给出了天真的日期时间,我不能用它来与酒店时间进行比较。

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

1 个答案:

答案 0 :(得分:7)

要按城市和国家/地区解析时区,首先需要获取纬度/经度坐标。请参阅此问题及其各种答案:https://stackoverflow.com/q/23572/634824

请注意,世界上有些城市的部分区域可以观察不同的时区。在这些情况下,您可能会有一些小的误差。请参阅此帖子:can 2 timezone be for 1 city?

由于您说您正在寻找特定地点(酒店)的位置,您可能最好使用其完整地址对每个地方的确切坐标进行地理编码。有许多服务,例如the one provided by Google here

然后使用此处描述的服务中的坐标:How to get a time zone from a location using latitude and longitude coordinates?

获得时区ID后,例如Asia/SeoulAmerica/New_York,您可以在pytz函数中使用它,因为用户在他的回答中显示了错误。

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

其他想法

  • 您可以将GeoDjango与时区地图数据found here一起使用。
  • 您可以查看Django-GeoNames,看看是否包含了GeoNames的时区。
  • 可能还有其他一些Django或Python特定的库,我在5分钟内没有找到我在Google上搜索的内容。