客户端和服务器端之间的日期更改(GWT)

时间:2016-06-08 14:40:56

标签: java date gwt

我有一个我无法理解的问题。我试着找到很多时间的答案,但没有成功。

我在GWT客户端和Java服务器端工作。

客户端,我读了日期(java.util.date)。当我将这些日期发送到服务器端时,收到它时有时会有一个小时的偏移量。 我知道TimeZone有很多问题。但我认为TimeZone不对我的问题负责,因为并非所有日期都是错误的。为了测试哪些日期错误,我创建了一个方法,该方法创建了1900年1月1日到今天之间所有日期的列表,并将该列表发送到服务器。

当我读取服务器中收到的列表时,结果如下:

  • 自1995年起所有日期都是正确的(发送期间日期没有变化)
  • 从1979年到1995年(大约):所有日期都是正确的,除了9月/ 10月28天(从开关到冬季夏令时)。由于偏移了一个小时,这是不正确的。
  • 之前:某些日期是正确的,有些日期不正确。

所以我尝试将100年添加到我的日期客户端,发送它并删除100年服务器端。所有收到的日期都是正确的!

有人已经有过这个问题吗?任何人都明白这个问题?欢迎任何帮助。

谢谢!

编辑:

好的我解决了这个问题。阅读Andrei Volgin的答案以了解问题。以下是解决它的代码:

// Create date you want
Date date = new Date()

// Get TimeZone of your date
TimeZone timeZone = TimeZone.createTimeZone(date.getTimezoneOffset());

// Adapt your date with the TimeZone
date.setTime(date.getTime() - (timeZone.getOffset(date) * 60000));

// You can send your date to server
// TimeZone server side is "UTC", and all dates received are correct

1 个答案:

答案 0 :(得分:2)

这是TimeZone问题。

多年来,TimeZone定义,特别是夏令时规则发生了变化。如果您只是传递时区ID或使用偏移创建时区,则浏览器不会意识到这些更改。因此,浏览器在显示时间时只使用此时区的时区偏移和当前DST设置。大多数情况下,这会产生正确的时间,但并非总是如此。这也解释了为什么未来的所有日期都是正确的。

为了获得准确的转换,您需要使用GWT提供的JSON数据字符串创建TimeZone object,即使用createTimeZone(java.lang.String tzJSON)createTimeZone(TimeZoneInfo timezoneData)

相关问题