GWT 中的客户端时区支持

2022-09-01 13:14:01

我正在开发一个 GWT 应用,我需要支持以下方案:
服务器位于时区 A
客户端的浏览器设置为时区 B
GWT 应用配置为在时区 C 中显示日期/时间

由于GWT不支持日历,并且JavaScript中对时区的本机支持不存在,因此我想不出一个漂亮而干净的解决方案来解决这个问题。

你们中是否有人做过类似的事情,或者你们知道我可以使用的任何好用途?

谢谢!


答案 1

根据我的经验,以下最佳实践在处理 gwt 中的日期和时区时显著降低了复杂性和混乱:

  1. 每当在应用程序中操作/存储日期时,请将所有日期视为GMT时区自纪元以来的毫秒。您可以将它们存储为字符串或int,这并没有真正的区别。
  2. 每当向最终用户显示日期时,请使用适当的时区设置日期的格式。

对于您的情况,当您在服务器上创建日期(时区A)时,在将其发送到客户端之前,将其转换为GMT中自epoch以来的毫秒。在客户端上,使用 DateTimeFormat(或编写您自己的日期格式化程序 util)将其根据需要转换为时区 B 或时区 C。


答案 2

您无法更改 GWT 时区,因此所有 java.util.Date 都有浏览器时区。您需要手动处理当前时区设置。

我看到 3 个选项:

  1. 您可以自行管理时区转换。

  2. 您可以覆盖java.util.Date的序列化程序/反序列化程序,如本文所示。也许使用自定义的java.util.Date implemtation,它会覆盖getTimezoneOffset()。。这种方法需要重新编译 GWT API!。

  3. 您可以通过扩展java.util.Date(如选项2)或使用某个时区对象包装它来实现自己的Date。在此选项中,CustomFieldSerializer 可能仍然有用,但不需要重新编译 GWT API。

我更喜欢选项3。至少在GWT RPC之前,也许有一天会支持覆盖CustomFieldSerializer的


有用的日期/时间格式提示。


推荐