【发布时间】:2020-08-17 01:12:48
【问题描述】:
我正在使用与我位于同一时区的 MySQL 服务器。我试图在DATE 类型的列上使用以下代码将 java.util.Date 插入数据库:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+2"));
Date date = dateFormat.parse(map.value("date"));
插入“日期”的位置。问题是在数据库中查找时日期差了一天。示例:我插入了 2020-05-02,数据库显示 2020-05-01。这产生了一个问题,当我想获得日期为 2020-05-02 的匹配项时,我必须提前 1 天搜索我不想做的事情。 这也发生在一天中的特定时间之间,所以我假设它是一个时区问题,但我不知道如何解决它!
提示?
【问题讨论】:
-
避免
java.util.Date;在内部,它只不过是一个long,它表示自 1970 年 1 月 1 日午夜 UTC 以来的毫秒数。它早已被java.time包中的LocalDateTime取代。当我现在需要在数据库中插入时,我会使用now() -
可能解决不了你的问题,建议不要使用
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。相反,只需使用来自java.time, the modern Java date and time API 的LocalDate。没错,这肯定是时区问题。 -
您的列的数据类型究竟是什么?