为什么本地主机上的客户端和服务器之间存在时间差

Why is there time difference between client and server on localhost

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

客户端发送时间: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}

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

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

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

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

关于网络 api odata json 序列化程序,from this post I could say that it is other then 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 补丁请求

服务器代码在应用程序池中用户的用户上下文中运行。
客户端浏览器中的 java 脚本决定那里的时区。

这些时区可能不同。

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

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

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

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

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

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

谜底已解:

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

在客户端,新日期 (dateOfArrival) 给出 2015-04-25T04:00:00.000Z
将此值发送到服务器,服务器使其成为 4/24/2015 11:00:00 PM

服务器收到相同的值。

this post所述,如果日期不在夏令时范围内,例如01/01/2015,则所有日期都相同。

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