【问题标题】:Why is there time difference between client and server on localhost为什么本地主机上的客户端和服务器之间存在时差
【发布时间】:2015-07-04 12:05:47
【问题描述】:

应用程序正在本地主机上运行。服务器比客户端早一小时!

客户端发送时间:Sat Apr 25 2015 00:00:00 GMT-0400 (Eastern Daylight Time)

请求发送:dateOfArrival: "2015-04-25T04:00:00.000Z"

服务器接收时间:{4/24/2015 11:00:00 PM}

为什么会有一小时的时差,我该如何处理?我猜想这与日光时间和标准时间有关。

当我尝试这段代码时:

string dateStr = "2015-04-25T04:00:00.000Z";  
var myDate = DateTime.Parse(dateStr);  // it gives me myDate = {4/25/2015 12:00:00 AM}

其实我只对一天的一部分时间感兴趣。在我的数据库中,我将其保存为日期类型。但是因为这个时差,我的日子提前了一天。

我尝试了各种方法来处理问题,但我完全迷失在日期时间转换世界中!即使我迷失在 localhost 应用程序上,我也无法想象在实时服务器上会发生什么。

我认为this Q&A 也提到了类似的问题,但我想不通 如果重要的话:

我的时区:东部时区 (UTC-05:00)

关于 web api odata json 序列化器,from this post 我可以说它不是 this one

这是我的服务器代码:

// PATCH: odata/IncomingStudents(5)
[AcceptVerbs("PATCH", "MERGE")]
public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<IncomingStudent> patch)
{
    Validate(patch.GetEntity());
    var dateOfArrival = patch.GetEntity().DateOfArrival
... 
}

客户端是angularjs发送http补丁请求

【问题讨论】:

    标签: .net datetime asp.net-web-api2 asp.net-web-api-odata


    【解决方案1】:

    Server 代码运行在 APP Pool 中用户的用户上下文中。
    客户端浏览器中的 java 脚本决定了那里的时区。

    这些时区可能不同。

    【讨论】:

      【解决方案2】:

      为避免客户端和服务器之间的时区差异(或同一台机器内的不同配置),您可能希望使用 UTC 进行任何传输并将其存储在数据库中。

      意思是,在服务器端,您可能需要DateTime.ToUniversalTime() 来调整日期,或DateTime.UtcNow 来获取当前日期和时间。

      在 javascript 中,使用moment.js 来简化日期处理可能是个好主意。

      使用 moment.js,您可以通过以下方式获取 UTC 值:

      var localDate = new Date();
      var inUtc = moment(localDate).utc();
      

      您会在用户的本地偏移量中向用户显示信息,但始终使用 UTC 发送到服务器并接收回。

      【讨论】:

        【解决方案3】:

        谜团解开:

        db 中 dateOfArrival 的值为:2015-04-25(仅限日期)
        服务器采用该值使其成为:2015-04-24T23:00:00-05:00

        在客户端,new Date(dateOfArrival) 给出 2015-04-25T04:00:00.000Z
        将此值发送到服务器,服务器使其成为 2015 年 4 月 24 日晚上 11:00:00

        服务器接收相同的值。

        this post 中所述,如果日期不在夏令时范围内,例如 2015 年 1 月 1 日,则所有日期都是相同的。

        另一方面,当我使用 web api odata 时,它只适用于 DateTimeOffset 而不是 DateTime 我猜这个时区问题会发生

        【讨论】:

          猜你喜欢
          • 2014-05-29
          • 2016-05-12
          • 1970-01-01
          • 1970-01-01
          • 2017-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多