Java 8,时间没有被转换

时间:2018-03-11 21:59:23

标签: datetime java-8 datetimeoffset hibernate-5.x

我正在使用Hibernate 5&的MySQL。

这是保存到数据库中的内容:2018-03-11 06:26:47.336我不认为这是24小时格式,但那我怎么看AM / PM?如何以24小时格式节省时间?

在MySQL中运行SELECT @@global.time_zone;向我展示:+00:00所以我认为我准备接受UTC时间?这就是我设置我的pojo字段以设置时间的方法:

Clock clock = Clock.systemUTC();        
LocalDateTime userCreated = LocalDateTime.now(clock);

接受LocalDateTime。但是当我查询时从数据库返回的是:u1.getUserCreated(): 2018-03-11T01:26:47.336当我尝试将时间转换为特定区域时,我得到以下内容:

ZonedDateTime z1 = ZonedDateTime.of(u1.getUserCreated(), ZoneId.of("America/New_York"));
System.out.println("z1: " + z1); 
// z1: 2018-03-11T01:26:47.336-05:00[America/New_York]

但它确实应该是:9:26:47.336 PM (21:26:47.336)正如您在此网站上看到的那样:http://www.timebie.com/std/utc.php

1 个答案:

答案 0 :(得分:3)

你只是没有正确转换。您的LocalDateTime表示UTC时区的挂钟时间。不在纽约时区。所以你需要将它转换为UTC ::

中的ZonedDateTime
ZonedDateTime utcDateTime = u1.getUserCreated().atZone(ZoneOffset.UTC);

然后,如果你想在同一时刻获得一个ZonedDateTime,但是在纽约时区,那么,好吧,就这样做:

ZonedDateTime newYorkDateTime = utcDateTime.withZoneSameInstant(ZoneId.of("America/New_York"));