【问题标题】:Java 8, time is not being convertedJava 8,时间没有被转换
【发布时间】:2018-03-11 21:59:22
【问题描述】:

我正在使用 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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,谢谢,一分钟前也想通了。但是请您也回答我的其他问题好吗?关于上午、下午以及为什么数据库中设置的时间不是 24 小时格式?
    • 存储在数据库中的日期没有格式。格式取决于您(或用于查看数据库内容的软件)如何打印存储的日期。
    • 它显示 24 小时格式应该进入数据库:userCreated: 2018-03-11T22:52:29.348
    • @Noman 正如 JB Nizet 评论的那样,日期时间值存储在数据库中的一些位和字节集合中,而不是作为文本。所以日期时间没有“格式”。您的工具和中间件可能会生成表示日期时间值的文本。其中许多工具在选择此类文本的格式方面设计得很差。
    猜你喜欢
    • 2014-11-11
    • 2023-03-26
    • 2023-03-23
    • 1970-01-01
    • 2023-04-04
    • 2019-01-19
    • 2018-11-12
    • 2016-11-21
    相关资源
    最近更新 更多