应用程序在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}
为什么之间有一个小时的差异?我该如何处理它?我猜可能它与Daylight时间和Standart时间有关。
当我尝试这段代码时:
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补丁请求
答案 0 :(得分:1)
为避免客户端和服务器之间的时区差异(或同一台计算机内的不同配置),您可能希望将UTC用于任何传输并将其存储在数据库中。
意思是,在服务器端,您可能需要DateTime.ToUniversalTime()
来调整日期,或DateTime.UtcNow
来获取当前日期&amp;时间。
从javascript中使用moment.js来简化日期处理可能是个好主意。
使用moment.js,您可以通过以下方式获取UTC中的值:
var localDate = new Date();
var inUtc = moment(localDate).utc();
您将以本地偏移量向用户显示信息,但始终会发送到服务器并使用UTC接收回来。
答案 1 :(得分:0)
服务器代码与APP池中用户的用户上下文一样运行 客户端浏览器中的java脚本确定那里的时区。
这些时区可能会有所不同。