我正在开发一个GWT应用程序,需要支持以下场景:
服务器位于A时区
客户端浏览器设置为B时区
GWT应用程序配置为在C时区显示日期/时间
服务器位于A时区
客户端浏览器设置为B时区
GWT应用程序配置为在C时区显示日期/时间
由于GWT不支持Calendar,并且JavaScript的本地时区支持不存在,我无法想到一个好的和清晰的解决方案来解决这个问题。
你们中是否有人做过类似的事情或者知道我可以使用的好工具?
谢谢!
根据我的经验,在处理gwt中的日期和时区时,以下最佳实践显著降低了复杂性和混淆:
对于您的情况,当您在服务器上创建日期(时区A)时,请在将其发送到客户端之前将其转换为GMT自纪元以来的毫秒。在客户端上,使用DateTimeFormat(或编写自己的日期格式化程序)将其转换为适当的时区B或时区C。
您需要自己管理时区转换。
您可以像这篇文章中所述那样覆盖java.util.Date的序列化/反序列化器。也许使用一个自定义的java.util.Date实现,覆盖getTimezoneOffset()方法。这种方法需要重新编译GWT API!
您可以通过扩展java.util.Date(就像选项2中一样)或将其包装在某个时区对象中来实现自己的日期。在此选项中,CustomFieldSerializer仍然可能有用,但无需重新编译GWT API。
我为了这个目的创建了一个兼容GWT的Java版本的jsTimezoneDetect Javascript库。这应该可以在客户端提供(非常好的猜测)时区名称。请随意尝试并告诉我它是否适用于您。