【问题标题】:In web application, how does DateTime.Now know the local time for user?在 Web 应用程序中,DateTime.Now 如何知道用户的本地时间?
【发布时间】:2011-11-25 11:19:29
【问题描述】:

根据DateTime.Now vs. DateTime.UtcNow,您将日期时间信息存储为 UTC,并将其作为 DateTime.Now 显示给用户。如果是在 Web 应用程序上,DateTime.Now 如何知道用户的位置并相应地调整 UTC 时间?位置是从用户传入的标头信息中推断出来的吗?

【问题讨论】:

    标签: .net asp.net localization


    【解决方案1】:

    DateTime.Now 不知道用户的位置并进行调整。它基于运行站点的服务器。

    【讨论】:

      【解决方案2】:

      正如布莱克所说,事实并非如此。

      如果服务器正在为最终用户计算当前时间,则它必须基于用户提供的信息。否则,您通常会使用 javascript 根据本地计算机的时钟提供当前日期/时间参考。

      【讨论】:

      • 所以每次我想显示一个日期我都必须通过 JavaScript 函数冲洗它?有更清洁的方法吗? DateTime.ToLocalTime 方法呢?尽管您仍然需要确定用户所在的位置并设置 DateTime.Kind 属性,但您可以在服务器端执行此操作,而无需使用任何客户端代码。
      • Javascript 允许您根据客户的位置显示日期/时间。 DateTime.ToLocalTime 是指执行代码的物理机器的本地时间 - 因此,如果您的服务器在纽约,并且是 UMT 午夜,ToLocalTime 会将时间转换为前一天晚上 8 点(或晚上 7 点...),但是您的客户,在加利福尼亚,应该在下午 5 点而不是 8 点看到。您无法在服务器端自动判断客户端来自何处 - 您必须在客户端(再次使用 JavaScript)收集该信息并将其通过回调或类似方式传回。
      • 看起来只有两个选项。像您建议的那样使用 JavaScript,或者如果您存储用户的位置,您可以计算偏移量。 4guysfromrolla.com/articles/040710-1.aspx
      • 存储用户位置的明显问题是,您必须知道(或从 IP 中找出)它在哪里,分配空间以保留它等等。
      • 或者您可以向用户询问他们的位置并存储它。一些应用程序会这样做。当然这种方法也不是万无一失的。除了让用户输入他们的位置之外,它仅在该用户停留在该时区时才有效。如果用户移动到不同的时区,他们将不得不更新他们的位置。嗯。 :-/
      【解决方案3】:

      DateTime.Now根据服务器返回当前时间,而不是客户端。

      【讨论】:

        猜你喜欢
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        • 2013-09-05
        • 2012-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多