目录
3 LocalDate、LocalDateTime获取当天、本周、本月开始和结束时间
3.1 LocalDate、LocalDateTime获取本月第一天和最后一天
3.2 LocalDate、LocalDateTime获取本周第一天和最后一天
3.3 LocalDateTime获取当天开始时间和结束时间
1 LocalDate,String互转
-
LocalDate转String
LocalDate localDateNow = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String localDateNowStr = localDateNow.format(formatter);
System.out.println(localDateNowStr);
输出结果:2022-07-26
-
String转LocalDate
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate parse = LocalDate.parse("2022-07-26", formatter);
System.out.println(parse);
输出结果:2022-07-26
2 LocalDateTime,String互转
-
LocalDateTime转String
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTimeNow = LocalDateTime.now();
String localDateTimeNowStr = localDateTimeNow.format(formatter);
System.out.println(localDateTimeNowStr);
输出结果:2022-07-26 20:36:05
-
String转LocalDateTime
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parse = LocalDateTime.parse("2022-07-06 20:20:00", formatter);
System.out.println(parse);
输出结果:2022-07-06T20:20
3 LocalDateTime,LocalDate互转
-
LocalDateTime转LocalDate
LocalDateTime localDateTimeNow = LocalDateTime.now();
LocalDate localDate = localDateTimeNow.toLocalDate();
System.out.println(localDate);
输出结果:2022-07-06
-
LocalDate转LocalDateTime
LocalDate localDateNow = LocalDate.now();
// 当前时间时分秒
LocalTime localTimeNow = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.of(localDateNow, localTimeNow);
System.out.println(localDateTime);
输出结果:2022-07-26T17:40:17.302
4 Date,LocalDate互转
-
Date转LocalDate
Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println(localDate);
-----------------------------
输出结果:2022-09-15
-
LocalDate转Date
LocalDate now = LocalDate.now();
Date fromDate = Date.from(now.atStartOfDay(ZoneId.systemDefault()).toInstant());
System.out.println(fromDate);
-----------------------------
输出结果:Thu Sep 15 00:00:00 CST 2022
5 LocalDateTime,时间戳互转
-
LocalDateTime转时间戳
// 获取当前时间
LocalDateTime localDateTime = LocalDateTime.now();
// 时间戳(毫秒)
long milliseconds = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
// 时间戳(秒)
long second = localDateTime.toEpochSecond(ZoneOffset.ofHours(8));
System.out.println(localDateTime);
System.out.println(milliseconds);
System.out.println(second);
-----------------------------
输出结果:2023-09-15T10:57:54.824
1694746674824
1694746674
-
时间戳转LocalDateTime
// 时间戳(毫秒)转为LocalDateTime
LocalDateTime localDateTimeMillisecond = Instant.ofEpochMilli(1694746674824L).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();
System.out.println(localDateTimeMillisecond);
// 时间戳(秒)转为LocalDateTime
LocalDateTime localDateTimeSecond = LocalDateTime.ofEpochSecond(1694746674L, 0, ZoneOffset.ofHours(8));
System.out.println(localDateTimeSecond);
-----------------------------
输出结果:2023-09-15T10:57:54.824
2023-09-15T10:57:54
6 常用方法
1 LocalDate日期加减
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate parse = LocalDate.parse("2022-07-26", formatter);
// 天数+1
LocalDate localDateDay = parse.plusDays(1);
// 月份+1
LocalDate localDateMonths = parse.plusMonths(1);
// 年份+1
LocalDate localDateYears = parse.plusYears(1);
// 周+1
LocalDate localDateWeeks = parse.plusWeeks(1);
依次输出结果:2022-07-27
2022-08-26
2023-07-26
2022-08-02
对应日期减的方法为minus开头的方法,例如:parse.minusDays(1);为日期减一天。
2 LocalDate比较
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate parse = LocalDate.parse("2022-07-26", formatter);
LocalDate parseLast = LocalDate.parse("2022-07-28", formatter);
boolean before = parse.isBefore(parseLast);
boolean after = parse.isAfter(parseLast);
System.out.println(before);
System.out.println(after);
依次输出结果:true
false
3 LocalDate、LocalDateTime获取当天、本周、本月开始和结束时间
3.1 LocalDate、LocalDateTime获取本月第一天和最后一天
// 当前时间
LocalDate localDateNow = LocalDate.now();
// 获取当前月的第一天
LocalDate firstDay = localDateNow.with(TemporalAdjusters.firstDayOfMonth());
// 获取当前月的最后一天
LocalDate lastDay = localDateNow.with(TemporalAdjusters.lastDayOfMonth());
System.out.println(localDateNow);
System.out.println(firstDay);
System.out.println(lastDay);
System.out.println("------------------分隔线-------------------");
LocalDateTime firstDayOfMonthStart = firstDay.atStartOfDay();
LocalDateTime lastDayOfMonthEnd = LocalDateTime.of(lastDay, LocalTime.MAX);
System.out.println(firstDayOfMonthStart);
System.out.println(lastDayOfMonthEnd);
依次输出结果:2023-02-28
2023-02-01
2023-02-28
------------------分隔线-------------------
2023-02-01T00:00
2023-02-28T23:59:59.999999999
3.2 LocalDate、LocalDateTime获取本周第一天和最后一天
// 当前时间
LocalDate localDateNow = LocalDate.now();
// 本周一
LocalDate monday = localDateNow.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
// 本周日
LocalDate sunday = localDateNow.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
System.out.println(monday);
System.out.println(sunday);
System.out.println("------------------分隔线-------------------");
LocalDateTime mondayOfWeekStart = monday.atStartOfDay();
LocalDateTime sundayOfWeekEnd = LocalDateTime.of(sunday, LocalTime.MAX);
System.out.println(mondayOfWeekStart);
System.out.println(sundayOfWeekEnd);
依次输出结果:2023-02-27
2023-03-05
------------------分隔线-------------------
2023-02-27T00:00
2023-03-05T23:59:59.999999999
3.3 LocalDateTime获取当天开始时间和结束时间
LocalDate localDateNow = LocalDate.now();
// 当天开始时间
LocalDateTime todayStartTime = localDateNow.atStartOfDay();
// 当天结束时间
LocalDateTime todayEndTime = LocalDateTime.of(localDateNow, LocalTime.MAX);
// yyyy-MM-dd HH:mm:ss 格式输出
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(todayStartTime));
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(todayEndTime));
依次输出结果:2023-02-28 00:00:00
2023-02-28 23:59:59
4 LocalDateTime时间差值(毫秒)
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parseStart = LocalDateTime.parse("2022-08-10 10:31:00", formatter);
LocalDateTime parseEnd = LocalDateTime.parse("2022-08-10 10:32:05", formatter);
long between = ChronoUnit.MILLIS.between(parseStart, parseEnd);
System.out.println(between);
输出结果:65000
5 LocalDate获取两个日期之间的差值
String startTime = "2023-01-01";
String endTime = "2023-07-01";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate parseStart = LocalDate.parse(startTime, formatter);
LocalDate parseEnd = LocalDate.parse(endTime, formatter);
long until = parseStart.until(parseEnd, ChronoUnit.DAYS);
System.out.println(until);
输出结果:181
until()方法的第二个参数可指定两个日期之间的差的规则,例如:ChronoUnit.DAYS(以天为单位),ChronoUnit.WEEKS(以周为单位)...,具体查看ChronoUnit枚举类。