一尘不染

如何在.NET / Sql Server中在用户本地时间发送电子邮件?

sql

我正在编写一个程序,该程序需要每小时每小时发送一次电子邮件,但该时间对于用户而言是本地的。

假设我有2个用户位于不同的时区。约翰在纽约,弗雷德在洛杉矶。服务器在芝加哥。如果我想在本地用户下午6点发送电子邮件,则必须在服务器时间晚上7点发送给John,在服务器时间下午4点发送给Fred。

在.NET / Sql Server中,有什么好的方法?我已经找到了包含所有时区信息的xml文件,因此我正在考虑编写脚本以将其导入数据库,然后对其进行查询。

编辑: 我使用了“沨4znet.dll”,并在.NET端进行了所有比较。


阅读 141

收藏
2021-03-08

共1个答案

一尘不染

您有两种选择:

  • 将调整后的邮件操作时间存储到每个用户的数据库中。然后,只需将服务器时间与存储的时间进行比较即可。为避免混淆和可移植性问题,我将所有时间都存储在UTC中。因此,在SERVER_UTC_TIME()== storedUtcTime时发送邮件。
  • 将每个邮件操作的本地时间存储到数据库中,然后即时进行转换。当SERVER_UTC_TIME()== TO_UTC_TIME(storedLocalTime,userTimeZone)时发送邮件。

您应该决定什么对您的应用程序最有意义。例如,如果所有用户的邮寄时间始终相同,则选择选项(2)会更有意义。如果事件时间可以在用户之间甚至每个用户之间变化,那么如果您选择选项(1),则可以使开发和调试更加容易。无论哪种方式,您都需要知道用户的时区。

*这些函数调用显然是伪的,因为我不知道它们在T-SQL中的调用,但是它们应该存在。

2021-03-08