我正在编写一个程序,该程序需要每小时每小时发送一次电子邮件,但该时间对于用户而言是本地的。
假设我在不同时区有2位用户。约翰在纽约,弗雷德在洛杉矶。服务器在芝加哥。如果我想在本地用户下午6点发送电子邮件,则必须在服务器时间晚上7点发送给John,在服务器时间下午4点发送给Fred。
在.NET / Sql Server中,有什么好的方法?我已经找到了包含所有时区信息的xml文件,因此我正在考虑编写脚本以将其导入数据库,然后对其进行查询。
您有两种选择:
将调整后的邮件操作时间存储到每个用户的数据库中。然后只需将服务器时间与存储的时间进行比较即可。为避免混乱和可移植性问题,我将所有时间都存储在UTC中。因此,在SERVER_UTC_TIME()== storedUtcTime时发送邮件。 将每个邮件操作的本地时间存储到数据库中,然后即时进行转换。当SERVER_UTC_TIME()== TO_UTC_TIME(storedLocalTime,userTimeZone)时发送邮件。 您应该决定什么对您的应用程序最有意义。例如,如果所有用户的邮寄时间始终相同,则选择选项(2)会更有意义。如果事件时间可以在用户之间甚至每个用户之间变化,那么如果您选择选项(1),则可以使开发和调试更加容易。无论哪种方式,您都需要知道用户的时区。
*这些函数调用显然是伪的,因为我不知道它们在T-SQL中的调用,但是它们应该存在。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。