【问题标题】:How to handle time difference for expiry dates?如何处理到期日的时差?
【发布时间】:2016-08-20 08:32:57
【问题描述】:

我正在开发一个可供不同时区客户使用的 Web API 项目。

假设我们的服务器将在美国,用户可以在任何地方访问该服务。

当我们创建用户时,我们必须设置到期日期。

 public DateTime ExpireOn { get; set; }

来自客户并像这样发布日期

{
 "expireOn":"2020-12-30"
}

当我检查过期日期时,我正在这样做

if(user.ExpireOn >= DateTime.UtcNow)
{
return true;
}

现在的问题是,如果我从美国以外的地方创建用户。

建议我如何以适当的方式处理到期。

是否有任何标准方法可以为不同时区的用户处理到期日期? 这是解释在用户时间偏移中显示的时区http://www.prideparrot.com/blog/archive/2011/9/how_to_display_dates_and_times_in_clients_timezone的博客

【问题讨论】:

  • 您应该将数据发布为 UTC,而不是本地时间戳。
  • 其他暗示UTC的答案不一定正确。你需要问问自己——那个日期是什么意思? UTC 的那一天结束?在您业务的时区?在用户的时区?其他时区?只有你能回答这个问题。解决方案因上下文而异。

标签: javascript c# asp.net-mvc asp.net-web-api timezone


【解决方案1】:

您必须强制使用 UTC 时区(协调世界时)来调用您的 API。

我还建议使用 ISO 8601 等标准。

【讨论】:

    【解决方案2】:

    使用协调世界时 (UTC) 从 API 发送数据将确保日期不受时区影响

    您可以像这样在 JavaScript 中获取 UTC 日期:

    var myDate = new Date(); // Set this to your date in whichever timezone.
    var utcDate = myDate.toUTCString();
    

    【讨论】:

    • 除了用 Date 构造函数解析字符串不是一个好主意。手动解析它们要好得多,库可以提供帮助,但如果使用单一格式,那么 2 行函数就足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2014-05-04
    相关资源
    最近更新 更多