gpt4 book ai didi

java - 在数据库中查找具有 Java 中 OffsetDateTime 范围的记录

转载 作者:行者123 更新时间:2023-11-29 12:40:29 25 4
gpt4 key购买 nike

我的 postgres 数据库中有一个日期列,我希望能够找到具有给定日期范围的记录。

例如,在我的数据库中,我有一条包含 2018-10-29 09:05:30.100 updatetime 列的记录。我想找到 OffsetDateTime +- 5 秒的记录。

如何在我的 Java 代码中修复它以告诉 db 在 2018-10-29 09:05:25.1002018-10-29 09:05 之间获取记录:35.100? (该范围内只能有 1 条记录,所以不要担心结果。)

最佳答案

如果使用 OffsetDateTime上课时,您必须对时刻、时间轴上的实际点感兴趣。如果是这样,您的数据库列的数据类型应该是 TIMESTAMP WITH TIME ZONE(不是 WITHOUT)。

但奇怪的是,您的示例数据缺少 offset-from-UTC , 若干小时-分钟-秒。您必须指定偏移量或 time zone (ZoneId & ZonedDateTime) 来确定一个时刻。

我将通过分配任意偏移量来调整您的输入字符串。

OffsetDateTime odt = OffsetDateTime.parse( "2018-10-29T09:05:30.100+02:00" );

调整您的 ±5 秒。

Duration d = Duration.ofSeconds( 5 ) ;
OffsetDateTime start = odt.minus( d ) ;
OffsetDateTime stop = odt.plus( d ) ;

从 JDBC 4.2 开始,我们可以直接与数据库交换 java.time 对象。

在这里,我们使用常见的半开放方法来定义时间跨度。开始是包容性,而结尾是排他性。请注意,我们使用 SQL 命令BETWEEN

String sql = "SELECT * FROM event WHERE when >= ? AND when < ? ;" ;
PreparedStatement pstmt = con.prepareStatement( sql ) ;
pstmt.setObject( 1 , start ) ;
pstmt.setObject( 2 , stop ) ;

检索值。

OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

您可以直接与您的数据库交换java.time 对象。使用 JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。

从哪里获得 java.time 类?

ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

关于java - 在数据库中查找具有 Java 中 OffsetDateTime 范围的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53042529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com