文章目录
(1)LocalDate 操作日期值(仅包含年 月 日)信息
public class LocalDateDemo {
public static void main(String[] args) {
// 获取现在时间 格式:yyyy-MM-dd ex:2021-08-28
LocalDate now = LocalDate.now();
System.out.println(now);
// 格式化 ex:yyyyMMdd 20210828
String formatResult = now.format(DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(formatResult);
// 对时间进行偏移 可以偏移 周 月 年 天等
// plusXX 对时间做右偏移 (加时间)
LocalDate afterDate = now.plusYears(1).plusMonths(1).plusWeeks(1).plusDays(1);
// 我这里是对当前时间+1年+1月+1周+1天 2022-10-06
System.out.println(afterDate);
// minusXX 对时间做左偏移 (减时间)
// 我这里是对当前时间 -1年-1月 2020-07-28
LocalDate preDate = now.minusYears(1).minusMonths(1);
System.out.println(preDate);
// 从指定年月日中获取时间实例
LocalDate dateInstance = LocalDate.of(2021, 8, 28);
// LocalDate 实例 2021-08-28
System.out.println(dateInstance);
// 获取年 2021
System.out.println(dateInstance.getYear());
// 获取月 AUGUST
System.out.println(dateInstance.getMonth());
// 获取月份数值 1就是1月 2就是2月.....
System.out.println(dateInstance.getMonthValue());
// 今日是当前时间月的第几天
System.out.println(dateInstance.getDayOfMonth());
// 一年中的第几天
System.out.println(dateInstance.getDayOfYear());
// 一个月中的第几天
System.out.println(dateInstance.getDayOfMonth());
// 礼拜几 ex:SATURDAY 周六
System.out.println(dateInstance.getDayOfWeek());
// 礼拜几 数字
System.out.println(dateInstance.getDayOfWeek().getValue());
// 一个月中的第几天
System.out.println(dateInstance.get(ChronoField.DAY_OF_MONTH));
// 一年中的第几天
System.out.println(dateInstance.get(ChronoField.DAY_OF_YEAR));
// 获取某天开始于结束时间戳
LocalDate startDate = LocalDate.now();
// +8是北京时间
Long minTime = LocalDateTime.of(startDate, LocalTime.MIN).toInstant(ZoneOffset.of("+8")).toEpochMilli();
Long maxTime = LocalDateTime.of(startDate, LocalTime.MAX).toInstant(ZoneOffset.of("+8")).toEpochMilli();
System.out.println(minTime);
System.out.println(maxTime);
}
}
(2)LocalDateTime 操作时间值(详细的时间 包含年月日时分秒)
public class LocalDateTimeDemo {
public static void main(String[] args) {
//获取当前时间 2021-08-28T21:02:38.644
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
//格式化 20210828
System.out.println(now.format(DateTimeFormatter.BASIC_ISO_DATE));
//格式化 2021-08-28 21:02:38
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(now.format(formatter));
// 时间偏移 我这里是减一天加一月 并格式化 2021-09-27 21:02:38
System.out.println(now.minusDays(1).plusMonths(1).format(formatter));
// 获取当前年 月 日 当前年:2021 当前月:8 当前日:28
System.out.println("当前年:" + now.getYear() + " 当前月:" + now.getMonthValue() + " 当前日:" + now.getDayOfMonth());
//LocalDate + LocalTime 组合为 LocalDateTime
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
// 2021-08-28 21:02:38
System.out.println(LocalDateTime.of(localDate, localTime).format(formatter));
}
}
(3)Duration 求时间差(基于时间值LocalDateTime)
注意between两个参数前后顺序 param1 为开始时间 必须要小于param2 结束时间,如开始时间大于结束时间,那么结果为负数
public class ChronoUnitDemo {
public static void main(String[] args) {
LocalDateTime time1 = LocalDateTime.of(2019, 12, 2, 0, 0);
LocalDateTime time2 = LocalDateTime.now();
System.out.println("相差秒:" + ChronoUnit.SECONDS.between(time1, time2));
System.out.println("相差小时:" + ChronoUnit.HOURS.between(time1, time2));
System.out.println("相差半天:" + ChronoUnit.HALF_DAYS.between(time1, time2));
System.out.println("相差天:" + ChronoUnit.DAYS.between(time1, time2));
System.out.println("相差周:" + ChronoUnit.WEEKS.between(time1, time2));
System.out.println("相差月:" + ChronoUnit.MONTHS.between(time1, time2));
System.out.println("相差年" + ChronoUnit.YEARS.between(time1, time2));
System.out.println("相差年" + ChronoUnit.YEARS.between(time1, time2));
}
}
public class DurationDemo {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
// 2021-08-28T21:04:39.961
System.out.println(now);
LocalDateTime of = LocalDateTime.of(2020, 9, 28, 9, 5, 25, 720);
// 2020-09-28T09:05:25.000000720
System.out.println(of);
// between(p1,p1) p1为开始时间 p2为结束时间 求值结果是是p2-p1 所以要注意前后顺序,否则结果为负数
Duration duration = Duration.between(of, now);
System.out.println(duration);
//两个时间相差天数: 334天
System.out.println(duration.toDays());
//两个时间相差小时: 8028小时
System.out.println(duration.toHours());
//两个时间相差分钟: 481680 分钟
System.out.println(duration.toMinutes());
//两个时间相差毫秒: 28900809381 毫秒
System.out.println(duration.toMillis());
}
}
(4)ChronoUnit 求时间差(基于时间值LocalDateTime)
java8工具 ChronoUnit 求时间差
注意between两个参数前后顺序 param1 为开始时间 必须要小于param2 结束时间,如开始时间大于结束时间,那么结果为负数
public class ChronoUnitDemo {
public static void main(String[] args) {
LocalDateTime time1 = LocalDateTime.of(2019, 12, 2, 0, 0);
LocalDateTime time2 = LocalDateTime.now();
System.out.println("相差秒:" + ChronoUnit.SECONDS.between(time1, time2));
System.out.println("相差小时:" + ChronoUnit.HOURS.between(time1, time2));
System.out.println("相差半天:" + ChronoUnit.HALF_DAYS.between(time1, time2));
System.out.println("相差天:" + ChronoUnit.DAYS.between(time1, time2));
System.out.println("相差周:" + ChronoUnit.WEEKS.between(time1, time2));
System.out.println("相差月:" + ChronoUnit.MONTHS.between(time1, time2));
System.out.println("相差年" + ChronoUnit.YEARS.between(time1, time2));
System.out.println("相差年" + ChronoUnit.YEARS.between(time1, time2));
}
}
(5)Period 求时间差(基于日期值 LocalDate)
Period 比较的是两个日期之间相差数据,比如 2020-08-28 与 2021年 08-11 相差多久?
答案是一共相差 0年 10个月 零13天,getXXX即可取得对应相差值
public class PeriodDemo {
public static void main(String[] args) {
Period period = Period.between(LocalDate.of(2020, 8, 28),LocalDate.of(2021, 7, 11));
// 0
System.out.println(period.getYears());
// 11
System.out.println(period.getMonths());
// 13
System.out.println(period.getDays());
}
}