gpt4 book ai didi

java - 获取/选择底部 N 个元素会弄乱结果集中时间戳的值(我认为是因为时区)

转载 作者:行者123 更新时间:2023-12-01 16:44:06 26 4
gpt4 key购买 nike

我花了将近一天的时间尝试通过多种方式从一个拥有数十万行的表中获取最后 10 行。但是结果集中的时间戳总是困惑7个小时(这是UTC和我本地之间的时差)

架构

CREATE TABLE IF NOT EXISTS xyz(
id timestamp NOT NULL,
name varchar(40) NOT NULL,
PRIMARY KEY (id,name )
);

运行 select * from xyz order by id desc limit 10 后数据库中的底部 10 个条目;

 2020-05-12 12:00:00+00  
2020-05-12 12:00:00+00
2020-05-12 11:59:00+00
2020-05-12 11:58:00+00
2020-05-12 11:58:00+00
2020-05-12 11:58:00+00
2020-05-12 11:57:00+00
2020-05-12 11:56:00+00
2020-05-12 11:56:00+00
2020-05-12 11:55:00+00

我尝试了以下 3 种从数据库中选择底部 10 行的方法。另外,如果我在一个范围内选择,我总是会得到空列表。

List<xyz> findTop10ByOrderByIdDesc();
List<xyz> findTop10DistinctByIdBetweenOrderByIdDesc(LocalDateTime now,LocalDateTime after);
List<xyz> findTop10DistinctByIdBetweenOrderByIdDesc(Date now,Date after);

这里是 POJO,用于保存上述查询的结果集

public class xyz{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private java.util.Date id;
//private LocalDateTime id
private String name;

// ...
}

但是 id 字段总是关闭 7 小时(例如:我得到的第一个元素是 2020-05-12 05:00:00)。 a) 如何修复我的代码以获得 POJO(或结果集)中的正确时间戳。 b)如何检索某个范围内的所有条目(我现在得到空列表)。我认为两者是相关的

最佳答案

java.util.Date 从技术上讲,根据文档代表一个时间点。但实际上,它是一种可怕的混合物,可用于各种用途。这会导致数据库、驱动程序以及其上的任何 ORM 层中发生各种奇怪的(可能是完全错误的)事情。

幸运的是,java.util.Date 现在在 java.time.* package 中有一个适当的替换。 。您似乎对某个时间点感兴趣:事件何时发生。正确的数据类型是[Instant][1]

虽然我不能保证任何事情,但以正确的方式持久化和加载的机会要大得多。

关于java - 获取/选择底部 N 个元素会弄乱结果集中时间戳的值(我认为是因为时区),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61810380/

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