使用Java从MySQL检索TIMESTAMP需要一个小时



就像它在标题上一样。很简单,但我不知道问题出在哪里。我正在我的个人电脑上测试这个,所以我猜这可能是因为我的时间配置?还没有在实时服务器上测试过它,我认为它不会有什么不同,它是相同的代码。

这是存储在数据库中的TIMESTAMP:值

2020-06-01 00:00:00

这是我在Java:上检索到的值

2020-05-31 23:00:00.0

我尝试过其他时间戳,但它检索到的每一个时间戳都比实际时间早一个小时。

用于检索时间戳的代码:

Timestamp dateToRetrieve = results.getTimestamp(DATE_TO_RETRIEVE);

最简单的解决方案是转发一个小时,但我不喜欢这样做。我认为从长远来看不会有什么好处。

编辑:

这种情况只发生在表的一个特定列上。我不能在任何其他表上,甚至不能在同一表的另一列上复制它。其他每一个都像预期的那样工作。我从同一个表中检索两个时间戳,只有一个有这个错误,这怎么可能呢?我试图更改列的顺序,按名称或编号检索它,但我仍然没有得到它应该得到的时间戳,但偏移量为-1小时。

最有可能的是,您的数据库将日期时间保存在UTC中(这是正确的(,而您的区域偏移是UTC-1小时。你可以从以下代码中理解它:

import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String dateTimeString = "2020-06-01 00:00:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse(dateTimeString, formatter);
System.out.println(ldt);
// Date-time at UTC
OffsetDateTime odtUTC = ldt.atOffset(ZoneOffset.UTC);
System.out.println(odtUTC);
// Date-time at UTC-1
OffsetDateTime odtAtUTCMinusOneHour = odtUTC.withOffsetSameInstant(ZoneOffset.ofHours(-1));
System.out.println(odtAtUTCMinusOneHour);
System.out.println(odtAtUTCMinusOneHour.format(formatter));
}
}

输出:

2020-06-01T00:00
2020-06-01T00:00Z
2020-05-31T23:00-01:00
2020-05-31 23:00:00

最新更新