TimeZone没有显示

问题描述:

我为我的程序使用IntelliJ(我使用的是Kotlin和Java语言),我试图通过使用来自数据库的查询得到时间报告并将其发送给浏览器我使用邮差来查看结果)。当我调试我的代码,并通过查询的结果时区似乎确定'就像我想要的方式,它甚至显示-7(我和UTC之间的时间差),但是当涉及到浏览器(邮差)它显示UTC时间和+0000,例如(“date”:“2017-10-12T15:00:33.000 + 0000”而不是“date”:“2017-10-12T15:00:33.000 + 0007”)。 我试了很多选择,并浪费大约6个小时来找到解决方案,但没有任何工作。 谢谢你的帮助TimeZone没有显示

的Postgres存储在UTCTIMESTAMP WITH TIME ZONE,用它来进行调整成UTC后丢弃通过区。请注意,这是Postgres特定的行为 - 数据库的日期时间处理差别很大,SQL规范几乎没有涉及到该主题。

如Marlowe所述,如果您需要记住从数据输入中捕获的时区,则需要将该时区存储在另一列中。以continent/region的格式捕获proper time zone name,例如America/Montreal,Africa/CasablancaPacific/Auckland。切勿使用3-4字母缩写,如ESTIST,因为它们是而不是真正的时区,不是标准化的,甚至不是唯一的(!)。

➠以下是笔记:在交互式工具(例如pgAdmin )中的Postgres会话在获取UTC值后动态应用默认时区。虽然是善意的,但我认为这是一个反特征,因为它掩盖了存储数据的真实性质。

使用现代java.time类获取UTC值。

Instant instant = myResultSet.getObject(… , Instant.class) ; 

调整到您想要的时区。

ZoneId z = ZoneId.of("Asia/Kolkata") ; 
ZonedDateTime zdt = instant.atZone(z) ; 

生成使用DateTimeFormatter类的Web浏览器的字符串。请注意那里的自动定位功能。

所有这些在Stack Overflow上已经被覆盖了很多次。搜索以了解更多信息。

+0

谢谢你的回答。但因为我使用Kotlin,我无法使用您的解决方案,我之前尝试过类似的方法,但没有成功 –

+0

@TalShani,这应该不重要。 Kotlin完全具备Java互操作能力。事实上,如果您将Java代码复制粘贴到IntelliJ中,它将提供将其转换为Kotlin。 – Moira

+0

@ 1blustone是的我知道,但仍然没有任何理由的数据是正确的后,我修复时区,但第二它应该去浏览器它再次变化 –

解决方案:,所以我找到了解决我的问题在这里: Overriding BeanPropertyRowMapper to Support JodaTime DateTime

在不久

,时间戳类型不很好地时区,所以我在乔达改成了日期时间和工作包的结果由服装豆查询(从我发布的链接)