如何发出电子邮件用户当地时间。NET/Sql服务器?
-
09-06-2019 - |
题
我正在写一程序,需要发送了一封电子邮件每小时,但在时间当地用户使用。
说我有2个用户在不同时区。约翰是在纽约和弗雷德是在洛杉矶。服务器是在芝加哥。如果我想要发一封电子邮件午6时地向每个用户,我得发送电子邮件向约翰在7点服务时间和弗莱德在下午4点服务时间。
什么是好的做法,以此。NET/Sql服务器?我已经找到了一个xml文件的所有次区域信息,因此我正在考虑编写脚本,将其导入数据库,然后,查询它。
编辑: 我用"t4znet.dll"并没有所有的比较。净面。
解决方案
你有两个选择:
- 储存的调整时对邮件的行动进入数据库,用于各个用户。然后就比较服务器的时间与存储时间。为了避免混淆和可携带性问题,我要存储所有次在UTC。因此,发送邮件当SERVER_UTC_TIME()==storedUtcTime.
- 存储本地时间为每个邮件的行动进入数据库、然后转换上。发邮件的时候SERVER_UTC_TIME()==TO_UTC_TIME(storedLocalTime,userTimeZone).
你应该决定什么最有意义。例如,如果邮寄时间总是相同的,为所有用户,这使得更有意义去与选项(2)条。如果该事件的时间可以更改用户之间甚至是每个用户,它可能使发展和调试容易,如果你选择选项(1)条。不管怎样你会需要知道的用户的时区。
*这些功能的电话显然是伪的,因为我不知道他们的调用在T-SQL,但他们应该存在。
其他提示
I'm a PHP developer所以我会分享我知道从PHP.我敢肯定。净将包括类似的东西。
在PHP你可以得到的时区的差异为服务器的时间-因为你已经建议的,你想发送电子邮件在不同时在服务器上。
每次你添加一个用户保存自己的时间偏离服务器时(或他们的时区在情况的时区服务器的变化)。
然后,当你指定一个更新,有的自动化任务(Cron灯的人)运行每一个小时查看如果一个电子邮件需要的发送。这样做,直到没有电子邮件离开发送。
你可以补充你的解决方案与这个优秀的文章"世界钟和TimeZoneInformation类"我做了一个服务于发送一个文件与信息,包括地方和接收时间,我所做的是要修改此类的,所以我可以处理这一问题,它的工作完美的,正是因为我需要。
我认为你可以把这种类和获得从表"用户"的时区,他们和"计算"的适当时间,我的代码就像这;
//Get correct destination time
DateTime thedate = DateTime.Now;
string destinationtimezone = null;
//Load the time zone where the file is going
TimeZoneInformation tzi = TimeZoneInformation.FromName(this.m_destinationtimezone);
//Calculate
destinationtimezone = tzi.FromUniversalTime(thedate.ToUniversalTime()).ToString();
这类有一个问题,在Windows Vista于崩溃的"置(int指数)"功能,但你可以修改的代码,而不是使用功能:
public static TimeZoneInformation FromIndex(int index)
{
TimeZoneInformation[] zones = EnumZones();
for (int i = 0; i < zones.Length; ++i)
{
if (zones[i].Index == index)
return zones[i];
}
throw new ArgumentOutOfRangeException("index", index, "Unknown time zone index");
}
你可以改变它;
public static TimeZoneInformation FromName(string name)
{
TimeZoneInformation[] zones = EnumZones();
foreach (TimeZoneInformation tzi in zones)
{
if (tzi.DisplayName.Equals(name))
return tzi;
}
throw new ArgumentOutOfRangeException("name", name, "Unknown time zone name");
}