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

如何使用Joda Time、JPA、Eclipse Link和Postgres使用指定时区保存和检索这些时间戳

乌学博
2023-03-14

这似乎是一个常见的问题,所以也许我错过了一些明显的东西。使用Joda Time,我想保留带有时区的日期。如果我没有使用JPA,我想做这样的事情来保存和检索时间戳:

create table test_dates
(
  zone varchar(50),
  ts_with_time_zone timestamp with time zone
);

insert into test_dates values ('UTC', '2012-08-12 12:34:56 UTC');
insert into test_dates values ('MST', '2012-08-12 05:34:56 MST');

select 'UTC in MST', ts_with_time_zone at time zone 'MST' 
    from test_dates where zone = 'UTC';

那么,如何使用Joda Time、JPA、Eclipse Link和Postgres保存和检索具有指定时区的这些时间戳?

我已经看到了使用转换器的答案,但我不确定您将如何指定或使用时区。当然,我可以得到UTC时间并自己转换,但这违背了“带时区”列的目的。这可能吗?

理想的解决方案是Eclipse Link处理类似于Hibernate的JodaTime。

共有2个答案

诸葛彦
2023-03-14

您不保存时区。您只需使用输入字符串中指定的时区保存时间戳。时区将不会被保存。

select '2012-08-12 12:34:56 UTC'::timestamp with time zone;
      timestamptz       
------------------------
 2012-08-12 09:34:56-03

select '2012-08-12 05:34:56 MST'::timestamp with time zone;
      timestamptz       
------------------------
 2012-08-12 09:34:56-03

时区将是数据库时区。

select now()::timestamp with time zone;
              now              
-------------------------------
 2012-12-10 12:26:16.318484-02
劳和雅
2023-03-14

您可以自定义PostgreSQLPlatform以添加对通过JDBC存储时区的支持。您的JDBC驱动程序必须支持时区(很可能通过自定义类型或日历API)。

Eclipse Link确实支持Oracle上的时区,因此如果数据库和JDBC驱动程序支持它,也应该可以为时区扩展PostgreSQLPlatform。

 类似资料:
  • 我不太理解时间戳的用法, 例如 用户创建文章,他们可以选择,系统也会自动存储。 a.我是否应该使和具有时区并设置UTC的时间戳? b.用户post字符串,然后将其转换为utc时间戳,如下所示使用并存储,当某人选择这一行时,将其显示为用户客户端时间反向使用 c.我使用到,是不是意味着服务器时间?我做得对吗? 我的想法是,我总是在数据库中插入utc时区时间戳,无论用户/客户端读取的地方,都将数据转换为

  • 问题内容: 如何配置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。显示时,它将被格式

  • 问题内容: 在SQL Server中,我想创建一个表来节省事件的时间,并希望将其转换为用户选择的时区以进行显示。让我们说,如果在格林尼治标准时间1:00 PM在伦敦发生事件,那就是美国东部标准时间上午8:00。 给定这个例子,我想创建一个框架, 用户可以保存事件和时间的位置(提供事件的时区) 阅读这些事件,并在他喜欢的时区(美国东部时间)中显示时间 如何在SQL Server中完成此操作。 问题答

  • 问题内容: 我正在使用JodaTime在Java应用程序中处理时区。尝试从Java时区的ID构建DateTimeZone(JodaTime)对象时遇到问题。乔达抛出 对于以下时区列表: SystemV / HST10 SystemV / YST9 SystemV / YST9YDT SystemV / PST8 SystemV / PST8PDT SystemV / MST7 SystemV /

  • 环境 Spring Boot Starter Data JPA 1.4.2 Eclipselink 2.5.0 PostgreSQL 9.4.1211.jre7 我查看了数据库,时间戳包含我的本地时区日期时间,但我想用UTC存储它。这是因为我的默认时区设置为'Europe/Brussely',JPA/JDBC在将我的对象放入数据库之前将其转换为我的时区。 发现了不理想的解决方案 > 具有我想要实现