如何在SQL Server 2012中查找工作站的时区?

时间:2015-01-29 10:07:33

标签: timezone timezone-offset

我在表格中有5000多个机场代码(带有纬度,经度),时区列表可在包含这些时区的主表格中使用:http://support.microsoft.com/kb/973627

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

网站上提供的地图列表与链接中的时区名称不同。

2 个答案:

答案 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次调用,那么成本很低。它们还提供了许多信息,如坐标,位置,性能信息等。