在我的服务器端,我根据用户时间获取用户当前时间,我想每天发送一个推送通知,我已经完成了调度器任务,它每天执行推送通知,并按照服务器时间每天发送一个通知,它可以工作。我想发送推送通知每天早上6:00根据用户的日期-时间,而不是服务器时间。那么如何处理呢?:(情况是他们的多个用户有多个日期时区,那么如何按照他们的时区每天早上6点发送通知呢?)
他们的任何功能都像
var date = (userDateTime to 6 : AM);将给定时间转换为上午6点的日期保持不变。
提前谢谢。:)
发布于 2019-12-17 06:10:20
你在处理时间和时区。这条路就是疯狂。
我的理想建议是放弃这个想法。这是一个日历应用程序。而不是推送通知,而是使用分布式数据库设计 (自从移动应用程序已经成为一件事情以来,它们的用例激增),并让客户端应用程序根据客户端计算机时间和时区来决定何时发出警报。
.NET DateTime代码非常好,因为它将在操作系统输入和输出期间提取用户时区和区域性设置。但是正如您意识到的,这将无助于服务器应用程序--您只能自动获得服务器Timezone。您通常可以在服务器端存储一个“首选时区”或类似的东西。然后在处理过程中进行调整。
我有三个处理时间和时区的规则:
在更改DateTime时要记住的一件重要事情是,它是一个内置的结构。而且这些通常是不可变的,DateTime也不例外。不能更改实例--只能创建具有不同值的新实例。因此,您需要将任何函数调用的结果存储在DateTime变量中。
以下是DateTimes文档对您的案例的说明:
DateTime结构本身对从一个时区到另一个时区的转换提供了有限的支持。您可以使用ToLocalTime方法将UTC转换为本地时间,也可以使用ToUniversalTime方法将本地时间转换为UTC。但是,在TimeZoneInfo类中有一组完整的时区转换方法。使用这些方法可以将世界上任何一个时区中的时间转换为任何其他时区中的时间。
如果您可以将其移动到用户端,则ToLocal()是您要寻找的机器人。
如果您将其保存在服务器端,则需要TimeZoneInfo.ConvertTime()和它的重载。理想情况下,您希望拥有一个可以让用户选择的TimeZoneInfo规则集集合。但我不知道该怎么提供。
https://stackoverflow.com/questions/59368268
复制相似问题