如何为不同时区的用户在正确的时间发送提醒?

Mic*_*orn 4 c# sql asp.net

我从未创建过提醒应用程序.我就是这样看的.如果我的方式正确,请告诉我.

所以我有来自不同时区的用户.

ID         DateTimeUTC               TimeZoneID            

1          2011-07-12 02:15:15.000   TimeZneID1
2          2011-07-13 16:00:00.000   TimeZneID2
3          2013-11-03 17:00:00.000   TimeZneID3
4          2011-08-22 03:00:00.000   TimeZneID4
5          2011-07-16 22:00:00.000   TimeZneID5
Run Code Online (Sandbox Code Playgroud)

创建一个每15分钟运行一次的计划流程并执行以下步骤:

  1. 获取记录;
  2. 第二种是将DateTimeUTC转换为适合时区的Time
  3. 比较它是否匹配
    a.发送提醒
    var tzi = TimeZoneInfo.FindSystemTimeZoneById(TimeZneID1);
    var local = TimeZoneInfo.ConvertTimeFromUtc(DateTimeUTC, tzi);
    var timeNow = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now, tzi);
    if(local == timeNow)
    SendReminder();

这是有效的方式吗?这是正确的方法吗?

Jon*_*eet 8

如果数据库中的日期/时间值已经是UTC,则无需执行任何转换,当然......您只需要查看当前UTC时刻是否匹配,如果是,则发送提醒.

这假设你真的在数据库中意味着它是UTC,也就是说,当你输入提醒时你已经从用户的当地时间转换它(假设他们这样做是为了开始).