Skip to content

Date/Time API Java 8 提供了一个全新的 API,用以替换 java.util.Date 和 java.util.Calendar。Date / Time API 提供了多个类,帮助我们来完成工作,包括:

LocalDate LocalTime LocalDateTime ZonedDateTime

LocalDateTime (Java 8 及以上)

  • 位于 java.time 包中,是 Java 8 引入的日期时间 API 的一部分。
  • 不包含时区信息,仅表示日期和时间,例如 2023-10-06T12:30:00
  • 更现代化,线程安全,推荐在 Java 8+ 的项目中使用。

Date (Java 1.0 开始)

  • 位于 java.util 包中,是早期 Java 提供的日期时间类。
  • 包含日期和时间信息(内部存储为从 1970-01-01 00:00:00 UTC 开始的毫秒数)。
  • 不线程安全,API 使用不直观,许多方法已过时。

在 MyBatis 中的使用

2.1 与数据库字段的映射

  • 数据库中通常使用 DATETIMETIMESTAMPDATE 类型来存储时间信息。
  • MyBatis 会将这些字段映射到 Java 对象的属性上。
数据库字段类型LocalDateTime 映射Date 映射
DATETIMELocalDateTimeDate
TIMESTAMPLocalDateTimeDate
DATELocalDateDate(时间部分为 00:00:00)

日期格式化

LocalDateTime 格式化

使用 java.time.format.DateTimeFormatter 来格式化和解析 LocalDateTime

java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = now.format(formatter);
System.out.println(formattedDate); // 输出:2023-10-06 12:30:00

Date 格式化

使用 java.text.SimpleDateFormat 来格式化和解析 Date

java复制代码import java.util.Date;
import java.text.SimpleDateFormat;

Date now = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(now);
System.out.println(formattedDate); // 输出:2023-10-06 12:30:00

5. MyBatis Plus 的支持

如果你使用的是 MyBatis-Plus,它对 LocalDateTimeDate 提供了内置支持,无需额外配置。

  • 默认支持的类型:
    • java.time.LocalDateTime
    • java.time.LocalDate
    • java.util.Date
java
String dateStr = "2020-01-23T12:23:56";
DateTime dt = DateUtil.parse(dateStr);
java
// 解析ISO时间
LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
// 解析自定义格式时间
localDateTime = LocalDateTimeUtil.parse("2020-01-23", DatePattern.NORM_DATE_PATTERN);
// Date对象转换为LocalDateTime
LocalDateTime of = LocalDateTimeUtil.of(dt);
// 时间戳转换为LocalDateTime
LocalDateTime of = LocalDateTimeUtil.ofUTC(dt.getTime());
// "2020-01-23 12:23:56"
String format = LocalDateTimeUtil.format(localDateTime, DatePattern.NORM_DATETIME_PATTERN);

// 增加一天
// "2020-01-24T12:23:56"
LocalDateTime offset = LocalDateTimeUtil.offset(localDateTime, 1, ChronoUnit.DAYS);
// 减少时间
// "2020-01-22T12:23:56"
offset = LocalDateTimeUtil.offset(localDateTime, -1, ChronoUnit.DAYS);

//一天的开始和结束
// "2020-01-23T00:00"
LocalDateTime beginOfDay = LocalDateTimeUtil.beginOfDay(localDateTime);
// "2020-01-23T23:59:59.999999999"
LocalDateTime endOfDay = LocalDateTimeUtil.endOfDay(localDateTime);
java
LocalDateTime start = LocalDateTimeUtil.parse("2019-02-02T00:00:00");
LocalDateTime end = LocalDateTimeUtil.parse("2020-02-02T00:00:00");

Duration between = LocalDateTimeUtil.between(start, end);

// 365
between.toDays();
System.currentTimeMillis() //返回13位时间戳
Date date = new Date(); 
Calendar calendar = Calendar.getInstance();