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

C# 如何在服务器端处理用户日期,并根据用户时间而不是服务器每天发送通知,c#,datetime,asp.net-web-api,asp.net-web-api2,C#,Datetime,Asp.net Web Api,Asp.net Web Api2,在我的服务器端,我根据我希望每天发送推送通知的用户时间来计算用户当前时间 我所做的是调度器任务,它每天执行推送通知,并根据服务器时间每天发送一个通知,并且工作正常。我想按照用户日期时间而不是服务器时间,每天早上6:00发送推送通知。那么如何处理呢( 情况是他们的多个用户有多个日期时区,所以如何根据他们每天早上6点的时区发送通知 它们的功能是什么 var date = (userDateTime to 6 : AM); 将给定时间转换为上午6点的日期保持不变 提前感谢。:)您正在处理时间和

在我的服务器端,我根据我希望每天发送推送通知的用户时间来计算用户当前时间 我所做的是调度器任务,它每天执行推送通知,并根据服务器时间每天发送一个通知,并且工作正常。我想按照用户日期时间而不是服务器时间,每天早上6:00发送推送通知。那么如何处理呢( 情况是他们的多个用户有多个日期时区,所以如何根据他们每天早上6点的时区发送通知

它们的功能是什么

 var date =   (userDateTime to 6 : AM);
将给定时间转换为上午6点的日期保持不变


提前感谢。:)

您正在处理时间和时区问题。这就是谎言

我的理想建议是放弃这个想法。这是一个日历应用程序。与其推送通知,不如使用a(自从移动应用成为一种事物以来,它们的用例数量激增),并让客户端应用根据客户端计算机的时间和时区决定何时发出警报

NET DateTime代码非常好,因为它将在操作系统的输入和输出过程中提取用户的时区和区域设置。但正如您所意识到的,这对服务器应用程序没有帮助-您只能自动获得服务器时区。在服务器端,您通常能做的最好的事情就是存储一个“首选时区”或类似的东西。然后在处理过程中进行调整

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

  • 始终以UTC格式存储、传输和检索日期。您不希望在此处获得导致问题的时区
  • 切勿将其作为字符串存储、传输或检索
  • 如果要将它们作为字符串传输,请在所有端点选择固定的区域性格式和编码。您不想将其添加到您的问题中。XML和JSON为您处理这两个部分
  • 更改日期时间时需要记住的一点是,它是一个内置结构。这些通常是不可变的,DateTime也不例外。您不能更改实例-只能创建具有不同值的新实例。因此,您需要将任何函数调用的结果存储在
    DateTime
    变量中

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

    DateTime结构本身为从一个时区转换到另一个时区提供了有限的支持。您可以使用ToLocalTime方法将UTC转换为本地时间,也可以使用ToUniversalTime方法将本地时间转换为UTC。但是,TimeZoneInfo类中提供了一整套时区转换方法。您可以使用这些方法将世界上任何一个时区的时间转换为任何其他时区的时间

    如果您可以将其移动到用户端,
    ToLocal()
    就是您要寻找的机器人


    如果你把它放在服务器端,它的重载就是你所需要的。理想情况下,您希望有一组TimeZoneInfo规则集,供用户选择。但我不知道如何提供通知。

    那么,基于网页的日历应用程序是否具有通知功能?你是否有一个客户端程序在用户端运行?我使用第三方dll完成的通知部分它发送推送通知每天根据服务器时区分配给用户的任务我的观点是:如果你有一个应用程序在用户端运行,你可以提取他当前的时区并将其发送回服务器。这至少可以解决1个问题。您是否有任何代码示例如何提取该时间感谢您宝贵的回复。我只想将用户的时间按时区转换为上午6点,然后转换为UTC,因此如何执行此操作:(@ketan您可以创建一个具有正确值的TimeZoneInfo实例。然后将其和原始日期馈送到此:|至少我可以这么说。由于支持非常好,我总是避免做本地以外的事情。@ketan TimeZoneInfo类做两件事:1)在其实例属性中存储有关时区的所有数据。2)提供静态函数以在时区之间转换与日期时间相关的类型。因为它不是一个不可变的结构,所以它只是:new。设置值。使用此外,我还找到了列出所有可用时区的方法:
    TimeZoneInfo.GetSystemTimeZones()
    。仍然无法让用户以长格式向我发送其时区,我正在使用公共函数将其转换为长格式
    public static DateTime LongToUTC(long UTCDate){DateTime date;DateTime start=new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc);date=start.addmillizes(UTCDate).ToLocalTime();return date;}
    现在我的问题是如何将此用户日期转换为上午6点?:(:(非常感谢它能正常工作…我遇到了另一个问题,例如,如果试图使用他的时区服务器访问服务,则回答为“本地计算机上找不到时区id”,那么如何解决此问题:(?如何使我的服务器具有所有时区信息?