当前位置: 首页 > 知识库问答 >
问题:

在Oracle时间戳列中以UTC形式保存日期

丁灿
2023-03-14

我在应用程序yml中启用了以下功能

  jpa:
    hibernate:
      ddl-auto: none
    show-sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.Oracle12cDialect
        jdbc:
          time_zone: UTC

实体类字段如下所示

@Column(name = "last_user_edit_date", columnDefinition = "TIMESTAMP WITH TIME ZONE")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private ZonedDateTime lastUserEditDate;

在设置日期时,我正在使用

obj.setLastUserEditDate(ZonedDateTime.of(LocalDateTime.now(), ZoneId.of("UTC")));

我如何实现这个Spring JPA和Java8类?

谢谢

共有1个答案

申屠昆
2023-03-14

LocalDateTime类无法及时跟踪某个时刻。我无法想象调用localdatetime.now()有意义的场景。在使用类之前阅读Javadoc。

若要跟踪某个时刻,请使用instant(始终以UTC)、offsetDateTime(带有偏移量的时刻)或zonedDateTime(在特定区域中看到的时刻)。

奇怪的是,JDBC 4.2要求支持offsetdatetime,但最常见的两个类instant&Zoneddatetime是可选的。

OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ;

或者越长:

Instant instant = instant.now() ;  // Capture current moment in UTC.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;

发送到数据库:

myPreparedStatement.setObject( … , odt ) ;

从数据库检索:

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
OffsetDateTime odtUtc = odt.withOffsetSameInstant​( ZoneOffset.UTC ) ;
 类似资料:
  • 问题内容: 我有一个带有日期/时间值的字段,如下所示: 在UTC中。在查询中如何将其转换为EST? 我正在尝试类似的操作,但是会引发错误。 问题答案: 我必须对其进行一些微调,以使其在我的数据库上工作,但这是可行的: 关键是“在时区”语法。

  • 我有带有时间戳(UTC时间)的json日志。我将键和值映射到Cassandra表键并插入记录。但是,Cassandra通过从时间戳中减去5小时,再次将已有的UTC时间戳转换为UTC。这里的时区是(GMT+5)。 现在时间已经是UTC时间,并且仍然插入5小时前的时间戳。 我如何解决这个问题?

  • 我正在尝试使用Joda在一个简单的Java程序中获取UTC时间戳: 程序输出如下: 毫秒值是正确的UTC时间(即用时区确认)第二个值是时区。 我需要的是UTC值不变为(即独立于TZ),用于数据库写入。这可能吗? 我知道是本地日期(GMT-4),是UTC(GMT-0)。日期的输出值如下: 我尝试了所有组合,试图将的UTC值作为java.sql.TimeStamp: 用于测试的打印输出: 第一行是正确

  • 问题内容: 如何配置JPA /hibernate模式以UTC(GMT)时区在数据库中存储日期/时间?考虑以下带注释的JPA实体: 如果日期为太平洋标准时间(PST)2008-Feb-03 9:30 am,那么我希望数据库中存储2008-Feb-03 5:30 pm的UTC时间。同样,从数据库中检索日期时,我希望将其解释为UTC。因此,在这种情况下530pm是UTC 530pm。显示时,它将被格式化

  • 问题内容: 如何配置JPA /hibernate模式以UTC(GMT)时区在数据库中存储日期/时间?考虑以下带注释的JPA实体: 如果日期是太平洋标准时间(PST)2018-Feb-03 9:30 am,那么我希望数据库中存储2008-Feb-03 5:30 pm的UTC时间。同样,从数据库中检索日期时,我希望将其解释为UTC。因此,在这种情况下,530pm是UTC 530pm。显示时,它将被格式

  • 我知道有人问过这个问题,但没有提供解决方案。Python UTC日期时间对象的ISO格式不包括Z(Zulu或零偏移) 我正在寻找一种在Python中用这种格式生成UTC时间戳的干净方法。我需要的格式是。 具体来说,我需要在最后加上“Z”。Python的不会在末尾附加Z。 请注意,手动添加“Z”不是我可以接受的解决方案。我正在寻找一个干净的方法来做到这一点。 以ISO格式生成带后缀的UTC时间戳的干