如何在UTC,GMT,PST,MST,EST,CST等不同时区运行调度程序

时间:2014-08-28 11:38:47

标签: c# .net

我有一个数据库,其中包含来自不同国家的不同用户,这些用户已在我们的应用程可能有用户在不同国家/地区拥有朋友。

说,有3个用户A,B,C。 A在印度,B在旧金山,C在意大利,A,B,C三者都是朋友。

A的生日是在2014年8月29日。 所以,在2014年8月29日上午12:00:00(A&#39的时区),我需要发送B& C通过服务器关于A的时区的A生日通知。

如果我每天在服务器上午12:00:00选择运行调度程序,则可能与A的时区不同。它可能是在A时区之前或之后的几分钟。但我只需要在A&C的时区发送通知。

我需要实现此功能。如果有人能帮助我,我会很高兴。

请帮助我实现此功能

3 个答案:

答案 0 :(得分:0)

保存生日随着时间的推移意味着如果生日是在1/1/89然后对于服务器,他的生日可能是1/1/89 3:00 PM根据服务器时间然后运行通知发送者代码在每10分钟之后,如果发生了用户的生日,则应该发送该消息。

根据服务器时间,数据库生日中的

将是这样的。 1/1/89 2:00 PM 2/5/90 12:AM 6/7/92 02:AM等 通知发件人将在事件发生时不断检查,它将根据需要发送消息。

答案 1 :(得分:0)

一个想法:

  • 在数据库中,不要存储完整的b'days。只是日期部分。或者及时存储00:00:00。
  • 为每个用户存储他的时区。你可以从当前城市或国家等其他信息中推断出来。
  • 将您的计划程序设置为每小时运行一次。不是每一天。
  • 每次调度程序运行时,都会获取符合条件的用户列表。这些将是b'dy在当前时间的一小时内的用户。
  • 用户的当前时间可以计算为当前UTC时间加上时区。
  • 计算和搜索可以在一个SQL中进行,确切的sql语句将取决于Oracle / MySQl / SQlServer。
  • 大多数数据库都有获取当前UTC时间的方法。
  • 注意此机制有最大错误或1小时。但是有了快乐的邮件,这不是什么大问题。
  • 还要注意,有些城市和国家的时区不是一成不变的。对于印度而言,它是+5 1/2,但对于美国城市而言,它全年都有所不同。所以无论如何你的解决方案都不会很完美。

答案 2 :(得分:0)

这真的很容易做到。请按照以下步骤操作

  1. 创建一个每 24 小时运行一次的调度程序
  2. 使用 AWS Step 函数/Azure 逻辑应用
  3. 创建一个 lambda 函数,该函数将读取所有唯一的用户时区并根据上午 12:00:00 生成一条 Waiting 消息(AWS 步骤函数仅在满足等待时间时才会处理该消息)
  4. 调用您的 API 服务(输入为“UserTimeZone”),然后收集具有指定“UserTimeZone”的所有用户并发送生日通知。 请查找随附的屏幕截图以供参考以及我创建的示例流程。 sample work flow