Google Web 工具包 (GWT)、GAE 和 Google 云中的时区 SQL (mySQL)
TimeZones in Google Web Toolkit (GWT), GAE & Google Cloud SQL (mySQL)
当我在本地 运行 下面的代码时,日期和时间 returns 正确地显示为 UTC(在客户端)。当我在本地 运行 一个 GAE 服务器,并写入驻留在 Google 云中的 mySQL 数据库时,它也会正确地将日期存储为 UTC。
但是,当我将 webapp 部署到 Google App Engine (GAE) 时,时间存储为 UTC + 4 小时。 Google 云中的同一 mySQL 服务器设置为 Eastern/NY 时区,这意味着 mySQL 服务器通过将 4 小时添加到(它认为的)UTC 来补偿我在 UTC 时间过去了。
换句话说,mySQL 当 GAE 向它发送值时会增加 4 小时...但当我的本地服务器发送值时则不会。所以我想问题是,为什么当我 运行 离开我的本地 GAE 时它可以正确存储,但是当 运行 使用 GAE 时它会增加 4 个小时?
TimeZone 对象来自 com.google.gwt.i18n.client.TimeZone 库。无论我的客户端或服务器位于何处,我如何才能 gua运行tee 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;
}
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
也许你可以像这样设置你想要的时区。 Asia/Shanghai替换你的时区!
我最终存储了自纪元以来的秒数而不是实际日期值。这样,mySQL 不会尝试修复时区。
在我公司的项目中,我们在客户端使用 jsTimezoneDetect library 来检测 JavaScript 的时区。图书馆很容易使用。
当我在本地 运行 下面的代码时,日期和时间 returns 正确地显示为 UTC(在客户端)。当我在本地 运行 一个 GAE 服务器,并写入驻留在 Google 云中的 mySQL 数据库时,它也会正确地将日期存储为 UTC。
但是,当我将 webapp 部署到 Google App Engine (GAE) 时,时间存储为 UTC + 4 小时。 Google 云中的同一 mySQL 服务器设置为 Eastern/NY 时区,这意味着 mySQL 服务器通过将 4 小时添加到(它认为的)UTC 来补偿我在 UTC 时间过去了。
换句话说,mySQL 当 GAE 向它发送值时会增加 4 小时...但当我的本地服务器发送值时则不会。所以我想问题是,为什么当我 运行 离开我的本地 GAE 时它可以正确存储,但是当 运行 使用 GAE 时它会增加 4 个小时?
TimeZone 对象来自 com.google.gwt.i18n.client.TimeZone 库。无论我的客户端或服务器位于何处,我如何才能 gua运行tee 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;
}
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
也许你可以像这样设置你想要的时区。 Asia/Shanghai替换你的时区!
我最终存储了自纪元以来的秒数而不是实际日期值。这样,mySQL 不会尝试修复时区。
在我公司的项目中,我们在客户端使用 jsTimezoneDetect library 来检测 JavaScript 的时区。图书馆很容易使用。