GWT 日期处理...让客户端尊重服务器的时区

标签 gwt date timezone

我在这里阅读了很多帖子:GWT 日期处理。

一个特别让我心动的就是这个

Sending a date and timezone from GAE server to GWT client

无论如何,我正在从事的项目需要能够将天数、小时数、分钟间隔显示为网格中的标签。我的团队采用了一种方法,所有日期/时间实例都以 ISO8601 字符串格式从服务器传递给客户端。客户端要遵守服务器时区。 biz 用例是所有日期/时间实例都在“市场时间”,因此访问该应用程序的任何浏览器都将看到并使用“市场时间”时区中的日期,该时区恰好是 GMT-05:00(如果夏令时生效)或 GMT-06:00(如果标准时间生效)。

我在 Github 上发布了一些资源,在这里:

https://github.com/fastnsilver/gwt-datehandling-example

特别...

https://github.com/fastnsilver/gwt-datehandling-example/blob/master/src/main/java/me/fns/gwt/datehandling/client/util/CSTimeUtil.java

和 GWTTestCase

https://github.com/fastnsilver/gwt-datehandling-example/blob/master/src/test/java/me/fns/gwt/datehandling/client/util/CSTimeUtilTestGwt.java

希望有人可以盯着我们用于日期处理的实用程序(和测试),并帮助我们看到我们没有看到的东西。

编辑
基本问题是CSTimeUtil#hoursInDay(Date)在“过渡日”的生产模式下未正确计算此方法由其他方法(如 CSTimeUtil#dateToHour(Date)CSTimeUtil#labelsForDay(Date) )使用。

我已经使用 CSTimeUtil 的当前实现部署了我们的应用程序它似乎有效,但不完全有效。我真的对替代测试结果感到困惑,例如,mvn gwt:test在 Windows 上以 GWT 模式或生产模式运行,其中操作系统时区设置为美国以外的各种时区 GMT-05:00GMT-06:00 .

最佳答案

根据安德烈的一些提示以及一些严重的血汗和泪水,我自己弄清楚了这一点。我已经更新了 Github 中的代码,所以如果你很好奇,请去那里看看。

基础知识:

  • 确保所有字符串在从服务器发送到客户端时都符合 ISO8601(无毫秒),反之亦然
  • 使用 DateTimeFormat.getFormat("yyyy-MM-ddTHH:mm:ss.SZZZZ")formatparse日期
  • java.util.Date 检索以 GMT 为前缀的时区信息在“市场时间”中使用 DateTimeFormat(Date, TimeZone) ,其中 TimeZone参数设置为 TimeZone.createTimeZone(TZ_CONSTANTS_INSTANCE.americaChicago())和时区字符串由 TimeZone.getISOTimeZoneString(Date) 检索到
  • 生成天数,见 generateDay(Date, int)或小时 generateHour(Date, int) ,从源日期必须考虑到如果发生在“过渡日”,增量或减量可能会触发时区偏移的变化。
  • 关于GWT 日期处理...让客户端尊重服务器的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13214624/

    相关文章:

    Java时区错误

    php - laravel 5.0 中的时区 UTC 错误?

    oracle - oracle中TZ_OFFSET函数的返回数据类型是什么?

    java - Eclipse 中缺少插件 GWT 错误

    php - 查看过去24h是否有记录

    javascript - Moment JavaScript - 获取两个日期之间的差异

    java - Kotlin:将日期字符串转换为 ISO 字符串

    css - gwt 如何使用 setStyleName(String style, boolean add) - 对于 gwt 标准小部件

    java - 在 GWT 应用程序中更新客户端站点数据的最佳方法

    GWT Datagrid 不显示数据,但包含它