Timezone 如何在SQL Server 2012中查找站点的时区?

Timezone 如何在SQL Server 2012中查找站点的时区?,timezone,timezone-offset,Timezone,Timezone Offset,我在一个表中有5000多个机场代码(带有纬度和经度),并且时区列表在一个主表中可用,其中包含以下时区: 如何将时区映射到机场代码?对于相同的偏移量,我们可以有多个时区。示例:GMT-06:00有多个时区名称 网站上可用的映射列表没有与链接中相同的时区名称。这不是SQL Server本机可以执行的操作,您必须自己将lat/lon映射到时区,有关可能对您有所帮助的开源数据集,请参阅。注意Windows XP的Windows时区列表无效。它在过去已经改变了好几次,最近一次是在几个月前。在任何情况下,W

我在一个表中有5000多个机场代码(带有纬度和经度),并且时区列表在一个主表中可用,其中包含以下时区:

如何将时区映射到机场代码?对于相同的偏移量,我们可以有多个时区。示例:GMT-06:00有多个时区名称


网站上可用的映射列表没有与链接中相同的时区名称。

这不是SQL Server本机可以执行的操作,您必须自己将lat/lon映射到时区,有关可能对您有所帮助的开源数据集,请参阅。

注意Windows XP的Windows时区列表无效。它在过去已经改变了好几次,最近一次是在几个月前。在任何情况下,Windows时区名称都不会用于旅行或其他任何地方

GMT-6不是时区,它是一个偏移量。时区是IANA数据库中的时区,例如俄罗斯莫斯科。根据一年中的时间,偏移量会发生变化。实际上,俄罗斯的时区在过去十年中已经改变了很多次,所以你需要知道计算偏移量的完整日期

IANA数据库包含所有时区和计算19世纪的偏移量的规则

机场参考表应包含机场代码和时区,以解析客户端代码中的偏移量。存储偏移量是不实际的。它们不仅在变化,而且没有固定的日期来标记从冬季到夏季的变化

我理解,当你想计算旅行持续时间时,这有点痛苦。如果计算的数量不是很大,您可以在客户端执行所有操作。IANA数据库不大,通常嵌入到库中,这意味着每次计算都需要花费一些CPU周期。另一个选项是创建SQLCLR程序集以在服务器上执行转换。即使是大型旅行社(如欧洲前十大旅行社)也不需要这样做

在Linux系统中,是操作系统的一部分,您可以通过系统调用来解析偏移量。在Windows中,可以使用类似库的功能将时区解析为偏移

IANA数据库定期更新。嵌入它的库必须用新数据重新编译,这意味着您也必须更新您使用的任何库

所有机场参考数据(如来自Flightstats或其他提供商的数据)始终包含时区

如果您关心机场时区,则应避免在SQL Server中使用
datetime
,并尽可能使用
datetimeoffset
。不要假设所有旅行日期都是本地日期(因此需要机场查找和转换),而是要明确。无论如何,所有航空公司都会用有效的偏移量发布他们的时间表。这可以使持续时间的计算变得容易得多

关于机场与时区的匹配

这个过程不能完全自动化,因为所有数据集(甚至商业产品)都有遗漏。即使您购买了商业服务,也会出现机场丢失的情况,您必须通过谷歌搜索城市名称等。例如,如果机场尚未开放,但航空公司已开始出售往返机场的航班,则可能会发生这种情况

将坐标与时区匹配没有多大帮助。更容易匹配机场代码本身。有几种服务提供web服务或REST端点,您可以调用它们来请求机场信息。可以理解,免费/开源服务不如商业服务可靠

作为一个起点,你应该找到一些服务,查询你已经拥有的机场,并保留这些信息,在新机场出现时进行更新。不过,我们还是要花一些时间清理数据


考虑一下订阅一项商业服务——他们采用了每次使用的模式,如果你只需要拨打5000个电话,成本很低。它们还提供了很多信息,如坐标、位置、性能信息等。

您尝试过什么吗?谷歌可能?这与SQL无关,它与时区、偏移量和IANA数据库有关。任何在旅游业工作的人都知道投票结束的痛苦,请在投票前先理解问题。OP绝对不是在要求一个关于SQL@r_agg您指向的偏移量列表无论如何都是无效的-它已存在6年。通过Windows Update部署了一些更改无论谁投票关闭,这都不是一个广泛的问题。对任何做过这件事的人来说,这是一个非常具体和麻烦的问题,因为这在一定程度上是一个商业问题。不过,技术部分非常具体