使用Java从MySQL检索时间戳是在

使用Java从MySQL检索时间戳是在,java,mysql,database,time,Java,Mysql,Database,Time,就像标题上写的一样。很简单,但我不知道问题出在哪里。我正在我的个人电脑上测试,所以我猜可能是因为我的时间配置?还没有在实时服务器上测试过,我不认为会有什么不同,它是相同的代码 这是作为时间戳存储在数据库中的值: 2020-06-01 00:00:00 这是我在Java上检索时得到的值: 2020-05-31 23:00:00.0 我尝试过其他时间戳,但它检索到的每一个时间戳都比实际时间早一个小时 用于检索时间戳的代码: Timestamp dateToRetrieve = results.g

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

这是作为时间戳存储在数据库中的值:

2020-06-01 00:00:00
这是我在Java上检索时得到的值:

2020-05-31 23:00:00.0
我尝试过其他时间戳,但它检索到的每一个时间戳都比实际时间早一个小时

用于检索时间戳的代码:

Timestamp dateToRetrieve = results.getTimestamp(DATE_TO_RETRIEVE);
最简单的解决办法是只提前一个小时,但我不乐意这样做。我认为从长远来看这不会好

编辑:


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

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

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

时区,也可以是6h30,因此获取服务器的时区并与用户的时区一致,这样所有人都可以获得正确的时间,而不受互联网的影响。我在我的个人电脑上完成所有这些。在测试@nbkI'm时,客户端和服务器位于同一时区,UTC为-4。请记住,我是在我的个人电脑上进行所有这些(客户端和服务器测试)的。奇怪的是,当我在当前时间将某些内容保存到数据库时,它会准确地保存在我的时区。但是,当检索它时,它会在-1小时到来。为了增加这种奇怪的程度,这种情况只发生在一个表上,并且只发生在那个特定的列上。如果我试图从另一个表中检索日期,它显示的与服务器上的日期完全相同,或者甚至是从同一列中检索另一个日期,它显示的与预期的一样,在准确的时间。只有那个专栏有-1小时。