我在Usa有一台服务器,我的客户遍布世界各地,澳大利亚,南美洲,美国,加拿大,欧洲。
所以我需要在事件发生前一小时发送事件通知。
所以在sql server中我有一个包含不同事件的表,这些事件存储在Utc(2015-12-27 20:00:00.0000000)
中。在其他表中属于每个事件的时区("澳大利亚/悉尼")。
那么如何在查询中计算何时发送通知?或者我可能不得不用服务器端语言来做。
任何人都可以帮助我找到可能的解决方案。
由于
答案 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 wiki和Daylight saving time and time zone best practices。