如何在服务器端处理用户日期并根据用户时间而不是服务器每天发送通知

How to Handle the user date at server side and send notification per day as per user time not server

在我的服务器端,我根据用户时间获取用户当前时间我想每天发送一个推送通知 我完成了每天执行推送通知并根据服务器时间每天发送通知的调度程序任务并且它有效。我想每天早上 6:00 AM 根据用户日期时间而不是服务器时间发送推送通知。那么如何处理呢?:( 情况是他们是有多个日期-时区的多个用户,所以如何在每天早上 6 点根据他们的时区发送通知。

是他们的任何功能,如

 var date =   (userDateTime to 6 : AM);

将给定时间转换为早上 6 点的日期保持不变

提前致谢。 :)

您正在处理时间和时区。那个方向是 madness.

我的理想建议是放弃这个想法。这是一个日历应用程序。而不是推送通知,而是使用 Distributed Database Design(自从移动应用程序成为现实以来,他们的用例激增)并让客户端应用程序根据客户端计算机的时间和时区决定何时发出警报。

.NET DateTime 代码非常好,因为它将在 OS 的输入和输出期间提取用户的时区和文化设置。但是正如您意识到的那样,这对服务器应用程序没有帮助 - 您只能自动获得服务器时区。您通常可以在服务器端做的最好的事情是存储 "preferred timezone" 或类似的东西。然后在加工过程中适配。

我有 3 条处理时间和时区的规则:

  1. 始终以 UTC 格式存储、传输和检索日期。您不希望时区导致此处出现问题。
  2. 切勿将它们作为字符串存储、传输或检索。
  3. 如果您必须将它们作为字符串传输,请在所有端点选择固定的文化格式和编码。您不想将其添加到您的问题中。 XML 和 JSON 为您处理这两部分。

更改 DateTime 时要记住的一件重要事情是,它是一个内置结构。这些通常是不可变的, DateTime 也不例外。您不能更改实例 - 只能创建一个具有不同值的新实例。因此,您需要将任何函数调用的结果存储在 DateTime 变量中。

这是 DateTimes 文档针对您的案例所说的内容:

The DateTime structure itself offers limited support for converting from one time zone to another. You can use the ToLocalTime method to convert UTC to local time, or you can use the ToUniversalTime method to convert from local time to UTC. However, a full set of time zone conversion methods is available in the TimeZoneInfo class. You convert the time in any one of the world's time zones to the time in any other time zone using these methods.

如果能移到用户端,ToLocal()就是你要找的droid

如果您将它保留在服务器端,TimeZoneInfo.ConvertTime() 和它的重载就是您所需要的。理想情况下,您希望拥有一组 TimeZoneInfo 规则集,您可以让用户 select。但是不知道怎么提供。