【发布时间】:2018-09-07 14:36:50
【问题描述】:
给定 java 中的“EDT”之类的时区,有没有办法在 java 中将任意日期时间设置为该时区并使用正确的标签(EDT 或 EST)打印?
一些上下文:
我正在开发每周报告生成功能,该功能需要在首次配置报告的用户的时区中为报告添加时间戳。我想使用 3 个字母的时区标签(例如“EST”或“CST”)来标记报告,以便用户会看到类似“此报告是在 03-28-2018 12:00:00 pm EDT 生成的消息”。 (我意识到这些可能是模棱两可的。)
报告在服务器上以 pdf 格式生成,因此所有信息必须来自保存在数据库中的报告配置。
现在,当客户发布新的报告配置时,它会在配置中包含三个字母的时区及其偏移量(例如 EDT 的“GMT-0400”),并使用它创建一个 LocalDateTime 并保存偏移,然后用保存的标签打印它。显然这不会考虑夏令时,所以我需要一个更好的解决方案。
作为参考,我在客户端上使用 AngularJS。
【问题讨论】:
-
从根本上说,如果您可以捕获 IANA 时区,而不是包含模糊的 not-actually-a-time-zone 缩写的配置,您会好多身份证,例如“美国/纽约”。从那里,您可以随时为您想要的任何时刻找到正确的缩写。我们没有太多关于如何创建报告的背景信息,但是有很多选项可以在各种环境中检测时区。