如何使用GWT获取浏览器的"Real"时区



我需要实时区域ID,而不是假/通用时区(例如etc/gmt-xxx(。我知道有一些解决方案可以获取偏移,甚至有"假"时区,并带有命令:

int offset = new Date().getTimezoneOffset(); String timezone = TimeZone.createTimeZone(offset).getID();

目前我们的项目正在使用。但是,这只会给您摘要的偏移,但是您永远不会知道此偏移是否实际上包含DST(日光节省时间/夏季时间/夏季(偏移量。或换句话说:您知道总偏移是2个小时,但是它不会说出其实际上是2 0还是1 1,并且在我的用例中确实很重要。

这是我们的用例:我们具有允许用户上传Excel文件的功能,该功能将在其中解析Excel文件并将记录插入系统中。每个记录都有不同的日期时间。我们的功能必须检查以下:

  1. 如果浏览器时区(用户上传文件(受dst_offset的约束。
  2. 如果设置为DST,我们将进一步确定日期是否属于"夏季"。
  3. 我们的系统然后相应地抵消了日期时间并相应地存储到DB中。
  4. 因此,在批处理excel文件中,其中有些记录可能具有dst偏移,而有些则可能没有。

我知道我们可以使用Java日历来实现上述逻辑1&2,从此链接https://www.baeldung.com/java-daylight-savings。但是,先决条件是:我们需要实时区域ID,例如"欧洲/罗马",但不是假或一般的"等等/gmt-xxx"。

请建议我们如何在智能GWT中获得"真实的"时区ID?或者是否有其他处理上述用例的选择?

我几天前添加了 ZoneId.systemDefault()添加到https://github.com/adrianmsmith/gwt time,希望能够准确地做您想要的。如果浏览器可提供此信息,它将从浏览器中返回"欧洲/罗马"之类的区域(例如,例如不提供此信息(。如果您有任何问题,请随时通过我的GitHub帐户上的电子邮件地址与我联系。

最新更新