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

如何使用HibernateQuarkus从postgresql读取“带有时区的时间戳”

严瑞
2023-03-14

我面临在UI中显示UTC日期时间的问题。

数据库类型:postgresql

数据库列类型:带时区的时间戳

DB列值:2021-11-02 22:16:16.108341-04

从数据库读取值后:2021-11-02T22:16:16.108341-04:00

UI数据:2021-11-02T22:16:16.108341-04:00

实体:私有OffsetDateTime createdOn;

从 UI 中,我们无法解析 UTC 日期时间值并在 UI 中显示。有人能帮我解决日期问题吗?

共有1个答案

易俊远
2023-03-14

通过使用atZoneSameInstant,如果我理解正确的话,你可以实现你想要的:

OffsetDateTime time = OffsetDateTime.parse("2021-11-02T22:16:16.108341-04:00");

ZonedDateTime timeInUTC = time.atZoneSameInstant(ZoneId.of("UTC"));

System.out.println(timeInUTC);  ///2021-11-03T02:16:16.108341Z[UTC]
atZoneSameInstant

public ZonedDateTime atZoneSameInstant(ZoneId zone)

Combines this date-time with a time-zone to create a ZonedDateTime ensuring that the result has the same instant.

This returns a ZonedDateTime formed from this date-time and the specified time-zone. This conversion will ignore the visible local date-time and use the underlying instant instead. This avoids any problems with local time-line gaps or overlaps. The result might have different values for fields such as hour, minute an even day.

To attempt to retain the values of the fields, use atZoneSimilarLocal(ZoneId). To use the offset as the zone ID, use toZonedDateTime().

Parameters:
    zone - the time-zone to use, not null
Returns:
    the zoned date-time formed from this date-time, not null

==已编辑==

如果您希望数据库将信息存储在 (您的区域) 中,但存储在 UI (UTC) 中,则需要自定义方法。

@Entity
public class YourEntity{

 private OffsetDateTime createdOn;

 public ZonedDateTime getTimeInUTC{

  return //convert createdOn;

}

但是,如果您担心转换导致的“成本”,为什么不省去麻烦并将Hibernate配置为直接以 UTC 存储呢?

如何使用JPA和Hibernate在UTC时区存储日期/时间和时间戳

 类似资料:
  • 返回我女巫是错误的。 但接下来的查询如下: 我看对日期

  • 这是我在申请表中得到的日期: 将psqlDate转换为joda的最佳方式是什么? [编辑] 我可以使用解析方法。它可以很好地使用时间戳,它可以使用T-分割日期和时间的信息。 这应该与良好的模式一起工作: 带有时区的PostgreSQL时间戳的正确模式是什么?

  • 问题内容: 进行时: 与此文件: (第一个列是UNIX时间戳,即自1970年1月1日起经过的秒数),当我每15秒对数据进行一次重采样时出现以下错误: 就像“ datetime”信息尚未解析: 如何使用熊猫模块导入带有存储为时间戳的日期的.CSV? 然后,一旦我能够导入CSV, 如何访问日期 > 2015-12-02 12:02:18的行? 问题答案: 我的解决方案类似于Mike的解决方案:

  • 我选择“无时区”是因为我知道我的应用程序使用的所有时间戳总是UTC。就我得到的文档而言,“with timestamp”的唯一区别是,我可以提供其他时区的值,然后将其转换为UTC。然而,我想避免这样的自动转换,因为如果我知道我的值是UTC,它们几乎没有任何好处。 当我在测试表中添加新记录并使用pgAdmin查看表的内容时,我可以看到插入日期已正确地保存为UTC格式。 但是,当我尝试使用JDBC选择

  • 我正在尝试将日期插入我的PostgreSQL数据库。以下是我在java应用程序中解析日期的方式: 在我的PostgreSQL数据库中。我将其作为带有时区的。处理和插入它的理想方式是什么? 数据库期望的示例。

  • 在本例中,应为。 列datatype是)。以下是我的疑问: 不转换为PST时区:

  • 节点-pg: 在这三个输出中,只有PSQL是我期望的(也是需要的)输出。为什么会出现这种情况,如何在不需要在查询中显式强制转换的情况下修复它?