【问题标题】:Retrieving TIMESTAMP from MySQL with Java comes at one hour before使用 Java 从 MySQL 检索 TIMESTAMP 发生在前一小时
【发布时间】:2021-02-13 22:58:04
【问题描述】:

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

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

2020-06-01 00:00:00

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

2020-05-31 23:00:00.0

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

用于检索时间戳的代码:

Timestamp dateToRetrieve = results.getTimestamp(DATE_TO_RETRIEVE);

最简单的解决方案是只提前一小时,但我不乐意这样做。从长远来看,我认为这不会很好。

编辑:

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

【问题讨论】:

  • timezone,也可以是6h30,所以获取服务器的时区并与用户的时区进行补偿,所以都可以得到独立于互联网连接点的正确时间
  • 我在我的个人电脑上完成所有这些工作。测试时客户端和服务器在同一时区@nbk

标签: java mysql database time


【解决方案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

【讨论】:

  • 我在 -4 UTC。请记住,我正在我的个人 PC 上进行所有这些(客户端和服务器测试)。奇怪的是,当我在当前时间将某些内容保存到数据库时,它会准确地保存在我的时区,因为它应该是。但是在检索它时,它是 -1 小时
  • 为了增加这种奇怪的程度,这只发生在一张桌子上,而且只发生在那个特定的列上。如果我尝试从另一个表中检索日期,它显示的日期与服务器上的完全一样,或者甚至是同一列中的另一个日期,它会在确切的时间显示它应该做的事情。只有该列带有 -1 小时。
猜你喜欢
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
相关资源
最近更新 更多