java中的日期处理:只显示日期,不显示时间的两种处理方式
需要记录某个操作的操作时间,数据库中该字段为DATE类型;
插入数据的时候,使用数据库函数NOW()获取当前日期并插入:
<insert id="batchInsertOrgTestersByProjectId">insert into project_org_testers(project_unid, org_tester_id,franchise_date) values<foreach item="item" index="index" collection="list" separator=",">(#{item.projectUnid},#{item.orgTesterId},NOW() )</foreach>
</insert>
插入后,数据库中:
但是读取出来的日期显示为2025-01-08T00:00:00.000+08:00。希望读取之后,页面上展示的也是只有日期,没有时间,两种方式:
1、使用`SimpleDateFormat`格式化日期为一个字符串
因为java.util.Date
实际上包含了日期和时间,所以当使用java.util.Date
类型读取数据库中的Date
类型数据时,默认会包含时间信息,可以在输出日期时使用SimpleDateFormat
来格式化日期,只显示日期部分:
import java.text.SimpleDateFormat;
import java.util.Date;public class Main {public static void main(String[] args) {Date date = ... // 从数据库中读取的Date对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String formattedDate = sdf.format(date);System.out.println(formattedDate); // 只显示日期部分}
}
但是这样有一个缺点,它返回的是一个字符串,而不再是日期,在后续统计计算时可能不方便,所以更推荐使用第2种方案
2、使用java.time.LocalDate类型
Java 8或更高版本中,使用java.time.LocalDate来
读取数据库中的Date,它专门用于表示日期,不包含时间信息
import java.time.LocalDate;public class User {private LocalDate createDate;// getters and setters
}
在MyBatis的XML映射文件中,使用jdbcType="DATE"
来确保只读取日期部分。
<resultMap id="userResultMap" type="User"><result property="createDate" column="create_date" jdbcType="DATE" javaType="java.time.LocalDate"/>
</resultMap><select id="selectUser" resultMap="userResultMap">SELECT create_date FROM users WHERE id = #{id}
</select>
这样,获取到的数据直接就是日期格式,没有时间