EDT还是EST?根据夏令时动态设置3个字母的时区

时间:2018-03-28 19:15:36

标签: java spring timezone

考虑到像EDT'在java中,有没有办法在java中将任意日期时间设置为该时区并使用正确的标签(EDT或EST)进行打印?

某些背景信息:

我正在开发每周报告生成功能,需要在首次配置报告的用户的时区中为报告添加时间戳。我想使用3个字母的时区标签来标记报告,例如' EST'或者' CST,'这样用户就会看到一条消息,例如"该报告是在美国东部时间03-28-2018 12:00:00生成的。" (我意识到这些可能含糊不清。)

报告在服务器上生成为pdf,因此所有信息都必须来自保存在数据库中的报告配置。

现在,当客户发布新的报告配置时,它会在配置中包含三个字母的时区及其偏移量(例如' GMT-0400'用于EDT),并使用它来创建{ {1}}使用保存的偏移量,然后使用保存的标签打印。显然,这不能解释夏令时,所以我需要一个更好的解决方案。

作为参考,我在客户端上使用AngularJS。

1 个答案:

答案 0 :(得分:0)

事实证明我的问题需要客户端解决方案,根据评论和this问题,我使用moment.js moment.tz.guess();来获取配置新报告时包含的IANA时区。

一旦服务器知道IANA时区,创建分区日期时间很简单:

String timezone = "America/New_York";
ZonedDateTime timestamp = ZonedDateTime.now().withZoneSameInstant(ZoneId.of(timezone));