LocalDate常用用法
定义
LocalDate formatDate = LocalDate.of(2020, 2, 5); // 自定义
LocalDate today = LocalDate.now(); // 获取当前日期
getX() 获取年月日等
System.out.println(formatDate.getMonth()); // FEBRUARY 获取所在月份(英文)
System.out.println(formatDate.getMonthValue()); // 2 获取所在月份(英文)
System.out.println(formatDate.getDayOfMonth()); // 5 获取所在天
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 上月当天
扩展用法
常用于报表中计算同比环比等日期
// 同环比日期计算
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(date.with(TemporalAdjusters.lastDayOfMonth())); // 当月的最后一天
// 1表示当月第一个 星期天 正数表示,第几个星期天,可能会超过当月
System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(1,DayOfWeek.SUNDAY)));
// 注 -1表示当月最后一个 星期天 负数表示: 如-4 =-1 -3 比表示当前月最后一天,往前3星期
System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(-1,DayOfWeek.SUNDAY)));
// 1表示当月第一个 星期天 正数表示,第几个星期天,可能会超过当月
System.out.println(date.with(TemporalAdjusters.dayOfWeekInMonth(1,DayOfWeek.SUNDAY)));
// 判断两个日期前后
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
LocalDateTime与String互转
// LocalDateTime 转字符串
// 第一种方法
String date1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
// 第二种方法
String date2 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(date1);
System.out.println(date2);
// 字符串转 LocalDateTime
// 第一种方法
LocalDateTime dateTime2 = LocalDateTime.parse("2021-01-18 02:35:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
// 第二种方法
TemporalAccessor temporalAccessor = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").parse("2021-01-18 02:31:29");
LocalDateTime dateTime1 = LocalDateTime.from(temporalAccessor);
System.out.println(dateTime1);
System.out.println(dateTime2);
计算时间差值
LocalDate startDate = LocalDate.of(2020, 2, 20);
LocalDate endDate = LocalDate.of(2021, 1, 15);
// 相差年
long years = ChronoUnit.YEARS.between(startDate, endDate);
// 相差月
long months = ChronoUnit.MONTHS.between(startDate, endDate);
// 相差周
long weeks = ChronoUnit.WEEKS.between(startDate, endDate);
// 相差天
long days = ChronoUnit.DAYS.between(startDate, endDate);
// 相差小时
long hours = ChronoUnit.HOURS.between(startDate, endDate);
// 相差分钟
long minutes = ChronoUnit.MINUTES.between(startDate, endDate);
// 相差秒
long seconds = ChronoUnit.SECONDS.between(startDate, endDate);
// 相差毫秒
long milis = ChronoUnit.MILLIS.between(startDate, endDate);
// 相差毫微秒
long nano = ChronoUnit.NANOS.between(startDate, endDate);
近一周的全部日期列表
List<String> list = IntStream.rangeClosed(0, 6).boxed()
.map(daysToSubtract -> LocalDate.now().minusDays(daysToSubtract).toString())
.collect(Collectors.toList());
list.forEach(System.out::println);
网友评论