在开发的过程中,无论如何都要碰到关于显示日期的情况,关于日期的种类错综复杂而且繁多,那么关于个人习惯看的属性最多就是YYYY-MM-DD这种形式,但是我们设置数据库中的日期属性经常为Date类型。
我在开发中碰到这么一个问题,在后台中我输出一个从数据库中读取的Date变量,他的显示是2023-12-31,但是我返回给前台显示的时候就变成了:December 31, 2023 这种形式,碰到这种问题我第一时间的想法也是将其转化为String类型然后回显,那么接下来直接开始操作:
List<PageData> userList = auditPlanService.getAuditPlanUser(pd); // 列出用户列表
for (int i = 0; i < userList.size(); i++) {
System.out.println("当前类为:" + userList.get(i).get("PLAN_TIME").getClass().getName());//当前类为:java.sql.Date
}
显示的类为:java.sql.Date
也就是说读取到的userList.get(i).get("PLAN_TIME")是java.sql.Date类,我们还可以输出一下:
为:2023-11-22
那么接着看前端:前端回显的是这种形式,查了一下叫做中文日期形式,接下来直接说解决办法
List<PageData> userList = auditPlanService.getAuditPlanUser(pd); // 列出用户列表
for (int i = 0; i < userList.size(); i++) {
userList.get(i).put("PLAN_TIME", userList.get(i).get("PLAN_TIME").toString());
}
直接使用toString将其转化为String类回显即可,可以看到显示正常了,到这里这个问题就算是解决结束了,那么我们可以往下在探究一下:关于java.sql.Date与java.util.Date
二:关于java.sql.Date与java.util.Date
1.java.util.Date
:
java.util.Date
类位于 java.util
包中。
java.util.Date
表示一个瞬间的日期和时间,精确到毫秒。它保存了自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。
2.java.sql.Date
:
java.sql.Date
类位于 java.sql
包中。
java.sql.Date
是为了与 SQL 的 DATE
类型相适应而设计的。它继承自 java.util.Date
,但其时间部分被规定为 00:00:00(午夜),并且不保存毫秒。
java.sql.Date
在 JDBC 中广泛用于与数据库进行日期交互。当你需要在数据库中存储日期而不需要时间部分时,通常会使用 java.sql.Date
。
总的来说:
-
java.util.Date
用于一般的日期和时间操作,精确到毫秒。 -
java.sql.Date
是为了与 SQLDATE
类型相适应而设计的,主要在 JDBC 中使用,时间部分被规定为 00:00:00。
在现代 Java 编程中,更推荐使用 java.time
包中的新日期和时间 API(例如 LocalDate
,LocalDateTime
),因为它提供了更丰富的功能和更好的设计。然而,在与数据库交互时,仍然可能需要使用 java.sql.Date
。
那么既然说到了LocalDate,那就说一下他与Date的区别。(关于LocalDate的详细使用,可以看我之前发过的一篇文章)
LocalDate类:JAVA中的日期详解_java localdate 获取当前日期_加洛斯的博客-CSDN博客https://blog.csdn.net/jialuosi/article/details/133770363?spm=1001.2014.3001.5502
三:关于LocalDate与Date
1.LocalDate
(Java 8及以后):
(1):LocalDate
是Java 8引入的java.time
包中的类,属于新的日期和时间API。
(2):
它表示一个日期,不包含时间和时区信息。
(3):LocalDate
不可变,线程安全,因此更适合在多线程环境中使用。
(4):
不受时区的影响,更适合处理与日期相关的逻辑而无需考虑时区问题。
2.Date
(旧的日期类,Java 7及之前):
(1):Date
是Java早期的日期类,存在于java.util
包中。
(2):
它包含日期和时间的信息,以毫秒为单位表示自1970年1月1日以来的时间。
(3):Date
是可变的,因此在多线程环境中使用时需要额外的同步措施。
(4):
已被新的日期和时间API (java.time
包) 替代,推荐在新代码中使用LocalDate
等类。