当我在本地运行下面的代码时,日期和时间以UTC的形式正确返回(在客户端)。当我在本地运行GAE服务器并写入位于Google中的mySQL数据库时,它也正确地将日期存储为UTC。
然而,当我将webapp部署到(GAE)时,时间被存储为UTC +4小时。Google中相同的mySQL服务器被设置为东方/纽约时区,这意味着mySQL服务器正在补偿(它认为是什么) UTC,为我在UTC时传递的时间增加了4个小时。
换句话说,当GAE向它发送值时,mySQL会增加4个小时.但当我的本地服务器这么做的时候就不会了。所以我想问题是,为什么当我运行本地GAE时,它会正确地存储,但是在运行GAE时增加4个小时呢?
TimeZone对象来自com.google.gwt.i18n.client.TimeZone库。无论我的客户端或服务器位于何处,我如何保证UTC的日期时间?我的应用程序无法在一段时间内依赖任何服务器,因为它大部分时间都是脱机运行的。
private static Date getNowDateTimeUTC() {
DateTimeFormat df = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss.SSS");
String utcDateString = df.format(new Date(), TimeZone.createTimeZone(0));
Date returnDate = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(utcDateString);
returnDate.setTime((returnDate.getTime() / 1000) * 1000); // rid the milliseconds
return returnDate;
}发布于 2016-08-24 03:12:47
最后,我存储了自历元开始的秒数,而不是实际的日期值。这样,mySQL就不会试图修复时区。
发布于 2016-08-23 02:13:59
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));也许你可以像这样设置时区。亚洲/上海取代您的时区!
发布于 2016-09-10 20:17:11
在我公司的项目中,我们在客户端使用jsTimezoneDetect库来用JavaScript检测时区。图书馆很容易使用。
https://stackoverflow.com/questions/39091169
复制相似问题