GWT 中的客户端时区支持
我正在开发一个 GWT 应用,我需要支持以下方案:
服务器位于时区 A
客户端的浏览器设置为时区 B
GWT 应用配置为在时区 C 中显示日期/时间
由于GWT不支持日历,并且JavaScript中对时区的本机支持不存在,因此我想不出一个漂亮而干净的解决方案来解决这个问题。
你们中是否有人做过类似的事情,或者你们知道我可以使用的任何好用途?
谢谢!
我正在开发一个 GWT 应用,我需要支持以下方案:
服务器位于时区 A
客户端的浏览器设置为时区 B
GWT 应用配置为在时区 C 中显示日期/时间
由于GWT不支持日历,并且JavaScript中对时区的本机支持不存在,因此我想不出一个漂亮而干净的解决方案来解决这个问题。
你们中是否有人做过类似的事情,或者你们知道我可以使用的任何好用途?
谢谢!
根据我的经验,以下最佳实践在处理 gwt 中的日期和时区时显著降低了复杂性和混乱:
对于您的情况,当您在服务器上创建日期(时区A)时,在将其发送到客户端之前,将其转换为GMT中自epoch以来的毫秒。在客户端上,使用 DateTimeFormat(或编写您自己的日期格式化程序 util)将其根据需要转换为时区 B 或时区 C。
您无法更改 GWT 时区,因此所有 java.util.Date 都有浏览器时区。您需要手动处理当前时区设置。
我看到 3 个选项:
您可以自行管理时区转换。
您可以覆盖java.util.Date的序列化程序/反序列化程序,如本文所示。也许使用自定义的java.util.Date implemtation,它会覆盖getTimezoneOffset()。。这种方法需要重新编译 GWT API!。
您可以通过扩展java.util.Date(如选项2)或使用某个时区对象包装它来实现自己的Date。在此选项中,CustomFieldSerializer 可能仍然有用,但不需要重新编译 GWT API。
我更喜欢选项3。至少在GWT RPC之前,也许有一天会支持覆盖CustomFieldSerializer的