【问题标题】:How to perform operations based on user's local date time on your servers如何根据用户在服务器上的本地日期时间执行操作
【发布时间】:2020-11-25 05:48:47
【问题描述】:

我有一个 ASP.NET MVC 应用程序。我的服务器上还有一个调度程序运行。现在用户可以根据本地时间指定何时需要执行某些操作。

另外,当他们提交请求时,我使用以下 JScript 方法来获取他们的 UTC 偏移量:

var date = new Date();
var offset = date.getTimezoneOffset();

使用它,我可以在服务器上使用以下 C# 方法来计算他们指定的时间是否等于他们的本地时间,如果是,我执行操作:

DateTime.Now.ToUniversalTime().AddMinutes((-1)*utcOffset);

现在,我认为在夏令时方面这是错误的。因此,如果 DST 关闭,并且他们将计划设置为在 4 个月内运行,那么到那时他们的偏移量将不同(即 +/- 60 分钟)。所以我相信我的日程安排会提前或推迟一小时。

我该如何解决这个问题?我在 Stackoverflow 或其他地方遇到了许多类似的问题,但找不到合适的。

感谢您的帮助。

【问题讨论】:

    标签: javascript c# asp.net-mvc jscript


    【解决方案1】:

    您还可以将日期和时间保存为 UNIX 时间毫秒。在客户端,您可以调用const scheduledUnixTimeMilliseconds = new Date('2020-12-25 00:00:00.000Z').getTime() 函数以获取当前UNIX 时间(以毫秒为单位)并将其发送到服务器。将其存储在那里后,您的调度程序可以在存储时间和当前 UNIX 时间(以毫秒为单位)之间进行简单比较,并运行计划任务。

    // Sent from the client side using Date.getTime() on the declared date
    long userScheduledUnixTimeMilliseconds = GetUserScheduledUnixTimeMilliseconds();
    long currentUnixTimeMilliseconds = System.DateTimeOffset.Now.ToUnixTimeMilliseconds();
    
    if (currentUnixTimeMilliseconds >= userScheduledUnixTimeMilliseconds)
    {
        RunScheduledTask();
    }
    

    【讨论】:

    • 感谢您的回复。所以这可能有效,但我需要更多的澄清。所以currentUnixTimeMilliseconds 在 UxMs 中,即使是在服务器上计算的,也没有任何区别,我们仍然可以使用。但是,userScheduledTime 对我来说没有意义。您在评论中说这是用户/客户提交请求的时间,因此,这不是他们想到的预定日期/时间。这意味着它不能用于比较和触发任务。我可能错过了你的意思。
    • @Stackedup 对不起,我第一次搞砸了。用户可能不会在当前时间安排任何事情(我很傻)。您可以在任何 JS Date 对象上使用 getTime 函数来获取其声明日期的 UNIX 时间毫秒数。
    • 感谢您的澄清。不幸的是,我无法获得有关客户的未来日期的详细信息。这主要是因为用户可以组装包含不同类型日期的指令并将其发送到服务器,这些指令在服务器上被解析。这就是为什么我需要一些机制,我可以使用他们的locale and current date 信息在服务器上做出关于未来日期的决定。
    【解决方案2】:

    当涉及时间计算/比较时,建议使用UTC时间

    DateTime.UtcNow
    

    您可以使用AddHours(), AddMinutes() 函数将UTC时间转换为所需的时区

    DateTime.UtcNow.AddHours()
    DateTime.UtcNow.AddMinutes()
    

    【讨论】:

    • 感谢 Adarsh 的回复。我同意你的看法,但我遇到的问题与大多数情况有点不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多