将通知发送到不同的时区

时间:2015-12-24 07:10:27

标签: sql sql-server notifications timezone utc

我在Usa有一台服务器,我的客户遍布世界各地,澳大利亚,南美洲,美国,加拿大,欧洲。

所以我需要在事件发生前一小时发送事件通知。

所以在sql server中我有一个包含不同事件的表,这些事件存储在Utc(2015-12-27 20:00:00.0000000)中。在其他表中属于每个事件的时区("澳大利亚/悉尼")。

那么如何在查询中计算何时发送通知?或者我可能不得不用服务器端语言来做。

任何人都可以帮助我找到可能的解决方案。

由于

1 个答案:

答案 0 :(得分:1)

你的问题非常广泛,所以我只能回答一般性问题。如果您需要更具体的答案,请将您的问题编辑为更具体。

要记住的一些事项:

  • 在应用层中完成最佳时区转换。大多数服务器端应用程序平台都具有时区转换功能,可以是本机的,也可以是通过库,或两者兼而有之。

  • 如果必须在数据库层进行转换(例如使用SSRS或SSAS,或复杂的存储过程等)并且您使用的是SQL Server,那么有两种方法考虑:

    • SQL Server 2016 CTP 3.1 adds native support for time zone conversions通过AT TIME ZONE语句。但是,它们使用Windows时区标识符,例如"AUS Eastern Standard Time",而不是IANA / Olson标识符,例如您指定的"Australia/Sydney"

    • 您可以对时区使用第三方支持,例如我的SQL Server Time Zone Support项目,它确实支持IANA / Olson时区标识符。还有其他类似的项目。

  • 无论您是在数据库层还是在应用程序层进行转换,都应将服务器的时区视为无关。始终以UTC 而不是当地时间获取当前时间。始终在UTC和特定时区之间进行转换。永远不要依赖服务器的本地时区设置。在许多服务器上,时区有意设置为UTC,但您不应该依赖它。

  • 您的问题中没有任何内容表明您计划如何进行日程安排或通知,但这实际上是更难的部分。具体而言,将事件安排到未来应基于UTC,而是基于事件的特定时区。 More about this here.

  • 您可能会考虑为您的应用程序层找到一个库,它将为您处理大部分内容,例如Quartz(Java)或Quartz.Net(.NET)。其他平台可能有类似的解决方案。

  • 您应该在Stack Overflow上阅读此主题上已有的大量资料,包括the timezone tag wikiDaylight saving time and time zone best practices