向不同时区发送通知
Sending Notification to different time zones
我在美国有一台服务器,我在世界各地都有客户,澳大利亚、南美洲、美国、加拿大、欧洲。
所以我需要在活动开始前一小时发送活动通知。
所以在 sql 服务器中我有一个 table 具有不同的事件,这些事件存储在 Utc(2015-12-27 20:00:00.0000000)
中。在其他 table 中,属于每个事件的时区 ("Australia/Sydney")。
那么我如何在查询中计算何时发送通知?或者我可能必须使用服务器端语言来完成。
谁能帮我解决一个可能的问题。
谢谢
你问的太笼统了,我只能泛泛而谈。如果您需要更具体的答案,请将您的问题编辑得更具体。
需要记住的几点:
时区转换最好在应用层完成。大多数服务器端应用程序平台都有时区转换功能,本地或通过库,或两者兼而有之。
如果您必须在数据库层进行转换(例如在使用 SSRS 或 SSAS 时,或复杂的存储过程等)并且您正在使用 SQL服务器,那么有两种做法可以考虑:
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 时区标识符。还有其他类似的项目。
不管你是在DB层还是在应用层转换,你的服务器的时区应该被认为是无关。始终获取 UTC 中的当前时间 而不是本地时间。始终在 UTC 和特定时区之间转换。永远不要特别依赖服务器的本地时区设置。在许多服务器上,时区被特意设置为 UTC,但您不应依赖于此。
您的问题中没有任何内容表明您计划如何进行日程安排或通知,但这实际上是更难的部分。具体来说,将事件安排到未来应该 而不是 基于 UTC,而是基于事件的特定时区。 More about this here.
您可能会考虑为您的应用程序层寻找一个可以为您处理其中大部分的库,例如 Quartz (Java) or Quartz.Net (.NET)。其他平台可能也有类似的解决方案。
您应该阅读 Stack Overflow 上关于此主题的大量 material,包括 the timezone tag wiki and Daylight saving time and time zone best practices.
我在美国有一台服务器,我在世界各地都有客户,澳大利亚、南美洲、美国、加拿大、欧洲。
所以我需要在活动开始前一小时发送活动通知。
所以在 sql 服务器中我有一个 table 具有不同的事件,这些事件存储在 Utc(2015-12-27 20:00:00.0000000)
中。在其他 table 中,属于每个事件的时区 ("Australia/Sydney")。
那么我如何在查询中计算何时发送通知?或者我可能必须使用服务器端语言来完成。
谁能帮我解决一个可能的问题。
谢谢
你问的太笼统了,我只能泛泛而谈。如果您需要更具体的答案,请将您的问题编辑得更具体。
需要记住的几点:
时区转换最好在应用层完成。大多数服务器端应用程序平台都有时区转换功能,本地或通过库,或两者兼而有之。
如果您必须在数据库层进行转换(例如在使用 SSRS 或 SSAS 时,或复杂的存储过程等)并且您正在使用 SQL服务器,那么有两种做法可以考虑:
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 时区标识符。还有其他类似的项目。
不管你是在DB层还是在应用层转换,你的服务器的时区应该被认为是无关。始终获取 UTC 中的当前时间 而不是本地时间。始终在 UTC 和特定时区之间转换。永远不要特别依赖服务器的本地时区设置。在许多服务器上,时区被特意设置为 UTC,但您不应依赖于此。
您的问题中没有任何内容表明您计划如何进行日程安排或通知,但这实际上是更难的部分。具体来说,将事件安排到未来应该 而不是 基于 UTC,而是基于事件的特定时区。 More about this here.
您可能会考虑为您的应用程序层寻找一个可以为您处理其中大部分的库,例如 Quartz (Java) or Quartz.Net (.NET)。其他平台可能也有类似的解决方案。
您应该阅读 Stack Overflow 上关于此主题的大量 material,包括 the timezone tag wiki and Daylight saving time and time zone best practices.