一、LocalDate(Time)常用用法
1.1、申明定义
LocalDate formatDate = LocalDate.of(2020, 2, 5); // 自定义
LocalDate today = LocalDate.now(); // 获取当前日期
LocalDateTime now1 = LocalDateTime.of(2023, 1, 30, 14, 0 ,0); // 自定义
LocalDateTime now2 = LocalDateTime.now(); // 获取当前时间
1.2、getX() 获取年月日等
注意:获取月份使用getMonthValue()
System.out.println(formatDate.getMonth()); // FEBRUARY 获取所在月份(英文)
System.out.println(formatDate.getMonthValue()); // 2 获取所在月份(英文)
System.out.println(formatDate.getDayOfMonth()); // 5 获取所在天
1.3、plusX()、minusX()
LocalDate nextDay = formatDate.plusDays(1);
System.out.println(nextDay); // 2020-02-06 明天
LocalDate nextWeek = formatDate.plusWeeks(1);
System.out.println(nextWeek); // 2020-02-12 下周当天
LocalDate lastMonth = formatDate.minusMonths(1);
System.out.println(lastMonth); // 2020-01-05 上月当天
1.4、compareTo、isAfter、isBefore 比较先后
LocalDateTime now1 = LocalDateTime.now();
Thread.sleep(1000);
LocalDateTime now2 = LocalDateTime.now();
System.out.println(now1.isAfter(now2)); // false now1不晚于now2
System.out.println(now1.isBefore(now2)); // true now1早于now2
System.out.println(now1.compareTo(now2)); // -1 now1早于now2
System.out.println(now2.compareTo(now1)); // 1 now2晚于now1
System.out.println(now1.compareTo(now1)); // 0 相等
1.5、扩展用法
常用于报表中计算同比环比等日期
// 同环比日期计算
LocalDate firstWeekDay = formatDate.with(TemporalAdjusters.previous(DayOfWeek.MONDAY));
System.out.println(firstWeekDay); // 2020-02-03 本周第一天
LocalDate firstMonthDay = formatDate.with(TemporalAdjusters.firstDayOfMonth());
System.out.println(firstMonthDay); // 2020-02-01 本月第一天
LocalDate firstYearDay = formatDate.with(TemporalAdjusters.firstDayOfYear());
System.out.println(firstYearDay); // 2020-01-01 本年第一天
// 判断两个日期前后
boolean param = formatDate.isBefore(today);
System.out.println(param); // true 判断a是否早于b
// 计算两个日期的间隔天数
LocalDate start = LocalDate.parse("2019-12-01");
LocalDate end = LocalDate.parse("2020-02-05");
long days = start.until(end, ChronoUnit.DAYS);
System.out.println("days: " + days); // days: 66
// 获取所在季度 2023-09-20 -> 2023-3
LocalDate ld = LocalDate.parse("2023-09-20");
String quarter1 = ld.format(DateTimeFormatter.ofPattern("yyyy-qqqq")); // 2023-03
二、常用日期型互转
2.1、LocalDate(Time)与String
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate formatDate = LocalDate.of(2023, 1, 15);
String dateStr = formatDate.format(df);
System.out.println("LocalDate => String: " + dateStr); // 2023-01-15
DateTimeFormatter df2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime formatDateTime = LocalDateTime.of(2023, 1, 30, 14, 0, 0);
String dateTimeStr = formatDateTime.format(df2);
System.out.println("String => LocalDateTime: " + dateTimeStr); // 2023-01-30 14:00:00
2.2、String与LocalDate(Time)
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate dateParam = LocalDate.parse(dateStr, df);
System.out.println("String => LocalDate: " + dateParam); // 2023-01-15
DateTimeFormatter df2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTimeParam = LocalDateTime.parse(dateTimeStr, df2);
System.out.println("String => LocalDateTime: " + dateTimeParam); // 2023-01-30T14:00
String date3 = "2023-03-21T01:30:00Z";
LocalDateTime ldt3 = LocalDateTime.parse(date3, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"));
String dateStr3 = ldt3.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println("dateStr3===========" + dateStr3); // 2023-03-21 01:30:00
2.3、LocalDateTime转TimeStamp
LocalDateTime aa = LocalDateTime.now();
Timestamp bb = Timestamp.valueOf(aa);
Timestamp cc = new Timestamp(System.currentTimeMillis());
System.out.println("LocalDateTime => Timestamp: " + bb); // 2023-01-30 14:31:21.244
System.out.println("获取时间戳: " + bb.getTime()); // 1675060281244
System.out.println("new Timestamp(): " + cc); // 2023-01-30 14:33:41.414
2.4、String与TimeStamp
String dd = "2023-01-30 15:00:00";
System.out.println("String => Timestamp: " + Timestamp.valueOf(dd)); // 2023-01-30 15:00:00.0
SimpleDateFormat df3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("Timestamp => String: " + df3.format(cc)); // 2023-01-30 14:40:51
三、代码实践
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
/**
* LocalDate日期转换
*
* @author: CNSTT
* @since: 2023/01/30
*/
public class Test {
public static void main(String[] args) {
LocalDate formatDate = LocalDate.of(2020, 2, 5);
LocalDate today = LocalDate.now();
System.out.println(formatDate); // 2020-02-05 当天
System.out.println(today); // 2020-02-08 本日当天
boolean param = formatDate.isBefore(today);
System.out.println(param); // true 判断a是否早于b
System.out.println("=========================================");
System.out.println(formatDate.getMonth()); // FEBRUARY 获取所在月份(英文)
System.out.println(formatDate.getMonthValue()); // 2 获取所在月份(数字)
System.out.println(formatDate.getDayOfMonth()); // 5 获取所在天
System.out.println("=========================================");
LocalDate nextDay = formatDate.plusDays(1);
System.out.println(nextDay); // 2020-02-06 明天
LocalDate nextWeek = formatDate.plusWeeks(1);
System.out.println(nextWeek); // 2020-02-12 下周当天
LocalDate lastMonth = formatDate.minusMonths(1);
System.out.println(lastMonth); // 2020-01-05 上月当天
System.out.println("=========================================");
LocalDate firstWeekDay = formatDate.with(TemporalAdjusters.previous(DayOfWeek.MONDAY));
System.out.println(firstWeekDay); // 2020-02-03 本周第一天
LocalDate firstMonthDay = formatDate.with(TemporalAdjusters.firstDayOfMonth());
System.out.println(firstMonthDay); // 2020-02-01 本月第一天
LocalDate firstYearDay = formatDate.with(TemporalAdjusters.firstDayOfYear());
System.out.println(firstYearDay); // 2020-01-01 本年第一天
System.out.println("=========================================");
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String dateStr = formatDate.format(df);
System.out.println("LocalDate => String: " + dateStr); // LocalDate => String: 2020-02-05
LocalDate dateParam = LocalDate.parse(dateStr, df);
System.out.println("String => LocalDate: " + dateParam); // String => LocalDate: 2020-02-05
LocalDate start = LocalDate.parse("2019-12-01");
LocalDate end = LocalDate.parse("2020-02-05");
long days = start.until(end, ChronoUnit.DAYS);
System.out.println("days: " + days); // days: 66
}
}