TimeZone没有显示

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

Postgres以UTC格式存储一个TIMESTAMP WITH TIME ZONE ,在使用它进行UTC调整后,丢弃已经通过的区域。 请注意,这是Postgres特定的行为 – 数据库的日期时间处理差别很大,SQL规范几乎没有涉及到该主题。

正如Marlowe评论的那样,如果您需要记住从数据输入中捕获的时区,则需要将其存储在另一列中。 以America/MontrealAfrica/CasablancaPacific/Aucklandcontinent/region的格式捕获适当的时区名称 。 切勿使用3-4字母缩写(如ESTIST因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

➠下面是rub:在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上已经被覆盖了很多次。 搜索以了解更多信息。

解决方案:所以我找到了解决我的问题在这里: 重写BeanPropertyRowMapper支持JodaTime DateTime

简而言之,时间戳类型不能很好地与时区,所以我把它改为Joda的DateTime,并包装由服装Bean的查询结果(从我贴的链接)