日期类与String:java.util.Date无法转换为java.lang.String

在开发的过程中,无论如何都要碰到关于显示日期的情况,关于日期的种类错综复杂而且繁多,那么关于个人习惯看的属性最多就是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 是为了与 SQL DATE 类型相适应而设计的,主要在 JDBC 中使用,时间部分被规定为 00:00:00。

在现代 Java 编程中,更推荐使用 java.time 包中的新日期和时间 API(例如 LocalDateLocalDateTime),因为它提供了更丰富的功能和更好的设计。然而,在与数据库交互时,仍然可能需要使用 java.sql.Date

那么既然说到了LocalDate,那就说一下他与Date的区别。(关于LocalDate的详细使用,可以看我之前发过的一篇文章)LocalDate类:JAVA中的日期详解_java localdate 获取当前日期_加洛斯的博客-CSDN博客icon-default.png?t=N7T8https://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等类。

猜你喜欢

转载自blog.csdn.net/jialuosi/article/details/134548738
今日推荐