我在表格中有5000多个机场代码(带有纬度,经度),时区列表可在包含这些时区的主表格中使用:http://support.microsoft.com/kb/973627。
如何将时区映射到机场代码?对于相同的偏移,我们可以有多个时区。示例:GMT-06:00有多个时区名称。
网站上提供的地图列表与链接中的时区名称不同。
答案 0 :(得分:1)
这不是SQL Server本身可以执行的操作,您必须自己将lat / lon映射到时区,请参阅http://timezonedb.com/以获取可能对您有用的开源数据集。
答案 1 :(得分:1)
注意 Windows XP的Windows时区列表无效。它在过去几次发生了变化,这是几个月前的最新变化。在任何情况下,Windows时区名称都不用于旅行或其他任何地方。
GMT-6不是一个时区,它是一个偏移量。时区是IANA数据库中的时区,例如。 Russia\Moscow
。根据一年中的时间,偏移量会发生变化。实际上,俄罗斯时区在过去十年中已经多次改变,所以你需要知道完整日期来计算偏移量。
IANA数据库包含所有时区以及计算回溯到19世纪的偏差的规则。
您的机场参考表应包含机场代码和时区,解决客户端代码中的偏移量。存储偏移是不切实际的。它们不仅会发生变化,而且还没有固定的日期来标记从冬季到夏季的变化。
我知道当你想计算旅行时间时,这有点痛苦。如果计算次数不是很大,你可以做客户端的一切。 IANA数据库并不大,通常嵌入到库中,这意味着每次计算都需要几个CPU周期。另一种选择是创建一个SQLCLR程序集以在服务器上进行转换。即便是大型旅行社(如欧洲十大旅行社)也不需要这样做。
在Linux系统中,IANA timezone database是操作系统的一部分,您可以通过系统调用解决偏移。在Windows中,您可以使用NodaTime之类的库来解决偏移时区。
IANA数据库会定期更新。嵌入它的库必须使用新数据重新编译,这意味着您必须更新您使用的任何数据。
所有机场参考数据(例如来自Flightstats或其他提供商)始终包含时区。
如果您关心机场时区,则应避免在SQL Server中使用datetime
并尽可能使用datetimeoffset
。而不是假设所有旅行日期都是本地日期(因此需要机场查找和转换),而不是明确。无论如何,所有航空公司都会发布有效抵消的时间表。这可以使持续时间计算很多更容易。
至于将机场与时区匹配
此过程无法完全自动化,因为所有数据集(甚至商业产品)都有遗漏。即使您购买商业服务,也会出现机场缺失的情况,您必须通过城市名称进行谷歌搜索等。例如,如果机场尚未开通,但航空公司已经开始销售航班/它。
将坐标与时区匹配并不是很有帮助。机场代码本身更容易匹配。有几种服务可以提供Web服务或REST端点,您可以调用它们来请求机场信息。可以理解的是,免费/开源服务的可靠性低于商业产品。
作为一个起点,您应该找到一些服务,查询您已经拥有的机场并保留信息,并在新机场出现时进行更新。期待花一些时间来清理数据。
考虑订阅商业服务 - 他们采用了每次使用的模式,如果你只有5000次调用,那么成本很低。它们还提供了许多信息,如坐标,位置,性能信息等。