Java/JavaScript日期:这是真的吗?

Jay*_*Pea 8 javascript java date

因此,假设用户在与应用程序服务器不同的时区从其浏览器运行我的Web应用程序.我使用JavaScript的date.getTime()方法在客户端序列化日期.我通过Json发送结果毫秒,然后通过调用在服务器端创建一个Java Date对象new Date(millisecondsFromJS).我将它存储在MySql上,检索它,通过调用Java再次序列化它,然后date.getTime()通过Json再次发送给客户端.

如果我用这些毫秒创建一个JavaScript Date对象,它会导致原始日期吗?我已成功完成此过程,但客户端和服务器当前位于同一时区.如果时区不同,我不确定日期是否会在过程中被破坏.

据我了解,使用getTime()返回一个独立于时区的即时时间.如果用户在2012年7月17日下午4:39 CDT捕获,服务器可能会将其存储为2012年7月17日晚上11点39分CEST,但是一旦服务器将此转换为自GMT以来的毫秒,客户端创建了从这些毫秒开始,它将成功地重建2012年7月17日下午4:39 CDT.这是真的?

Wol*_*ram 9

在Dropbox第一部分的Scaling课程中,有一些很好的建议:

在内部保存所有内容!服务器时间,数据库中的内容等.这将节省许多麻烦,而不仅仅是夏令时.有些软件甚至不能正确处理非UTC时间,所以不要这样做!我们将墙上的时钟设置为UTC.如果要向用户显示时间,请在最后一秒进行时区转换.


将unix时间毫秒发送到服务器,您就知道用户选择了哪个时间点.然后以UTC格式处理服务器上的所有内容,并将毫秒整数返回给客户端.

客户端/ JavaScript:

var date = new Date();
var clientMilliseconds = date.getTime();
// send clientMilliseconds to server
Run Code Online (Sandbox Code Playgroud)

服务器/ Java:

Date date = new Date(clientMilliseconds);
// store the date, then get it back
long serverMilliseconds = date.getTime();
// send serverMilliseconds back to client
Run Code Online (Sandbox Code Playgroud)

客户端/ JavaScript:

var date = new Date(serverMilliseconds);
// If receiving the error "Invalid Date", serverMilliseconds
// needs to be converted to an Integer. Consider:
// parseInt: parseInt(serverMilliseconds, 10)
// unary +:  (+serverMilliseconds)
Run Code Online (Sandbox Code Playgroud)

在此过程中,date服务器和客户端上的对象都将反映相应的时区,因此如果您同时查看它们,它们可能看起来不同,但如果您使用相同的时区将它们转换回UTC则不会.


所以回答你的问题:

如果我用这些毫秒创建一个JavaScript Date对象,它会导致原始日期吗?

是.

Java的Date(long date)构造函数getTime()方法使用unix time milliseconds运行.JavaScript getTime()Date构造函数也是如此.协调世界时(GMT/UTC)不应包含其他时区.