文章中提出了一些很好的建议Dropbox 的扩展经验教训,第 1 部分:
在内部保留 UTC 格式的所有内容!服务器时间、数据库中的内容等。这将节省很多麻烦,而不仅仅是夏令时。有些软件甚至无法正确处理非 UTC 时间,所以不要这样做!我们在墙上挂了一个时钟,设置为 UTC。当您想要向用户显示时间时,请在最后一秒进行时区转换。
将unix时间毫秒发送到服务器,您就知道用户选择了哪个时间点。然后以 UTC 处理服务器上的所有内容,并将毫秒整数返回给客户端。
客户端/JavaScript:
var date = new Date();
var clientMilliseconds = date.getTime();
// send clientMilliseconds to server
服务器/Java:
Date date = new Date(clientMilliseconds);
// store the date, then get it back
long serverMilliseconds = date.getTime();
// send serverMilliseconds back to client
客户端/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)
一路上,date
服务器和客户端上的对象都将反映各自的时区,因此如果您查看两者,它们可能看起来不同,但如果您使用相同的时区将它们转换回 UTC,则它们就不是不同的。
所以回答你的问题:
如果我用这些毫秒创建一个 JavaScript Date 对象,它会得到原始日期吗?
Yes.
Java's Date(long date)构造函数 and getTime() method以 unix 时间毫秒进行操作。 JavaScript 也是如此getTime() and Date构造函数。除此以外不应涉及其他时区协调世界时(格林尼治标准时间/世界标准时间)。