Java处理日期、日历和时间的不足之处:将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。然后就在 java8 上面增加新的特性。 全新API的众多好处之一就是,明确了日期时间概念,例如: 瞬时(instant)、 长短(duration)、 日期、 时间、 时区和 周期。 同时继承了Joda 库按人类语言和计算机各自解析的时间处理方式。不同于老版本,新API基于ISO标准日历系统,java.time包下的所有类都是不可变类型而且线程安全。 |
Instant:瞬时实例。
LocalDate:本地日期,不包含具体时间。
LocalTime:本地时间,不包含日期。
LocalDateTime:组合了日期和时间,但不包含时差和时区信息。
ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。
1.获取当前的日期
LocalDate now = LocalDate.now();
System.out.println(now);
2.获取年、月、日信息
LocalDate now = LocalDate.now();
System.out.println(now.getYear());
System.out.println(now.getMonth());
System.out.println(now.getDayOfMonth());
3.处理特定日期
LocalDate of = LocalDate.of(2022, 12, 15);
System.out.println(of);
4.判断两个日期是否相等
LocalDate now = LocalDate.now();
LocalDate of = LocalDate.of(2022, 9, 26);
if (now.equals(of)){
System.out.println("日期相等...");
}
5.检查像生日这种周期性事件
LocalDate now = LocalDate.now();
LocalDate of = LocalDate.of(2022, 9, 26);
MonthDay monthDay = MonthDay.of(of.getMonthValue(), of.getDayOfMonth());
MonthDay from = monthDay.from(now);
if (monthDay.equals(from)){
System.out.println("今天是纪念日...");
} else {
System.out.println("今天是非纪念日...");
}
6.获取当前的时间
LocalTime now = LocalTime.now();
System.out.println(now);
7.在现有的时间上增加小时
LocalTime now = LocalTime.now();
LocalTime localTime = now.plusHours(2);
System.out.println(localTime);
8.如何计算一个星期之后的日期
LocalDate now = LocalDate.now();
LocalDate plus = now.plus(1, ChronoUnit.WEEKS);
System.out.println("当前时间:"+ now);
System.out.println("一周后时间:"+ plus);
9.计算一年前或一年后的日期
LocalDate now = LocalDate.now();
LocalDate minus = now.minus(1, ChronoUnit.YEARS);
System.out.println("当前时间:"+ now);
System.out.println("一年前时间:"+ minus);
10.Clock时钟类
//获取时间戳
System.out.println(Clock.systemUTC().millis());
11.判断日期是早于还是晚于另一个日期
LocalDate now = LocalDate.now();
LocalDate of = LocalDate.of(2022, 11, 25);
if (of.isAfter(now)) {
System.out.println("of 时间 晚于 now 时间...");
}
if (now.isBefore(of)) {
System.out.println("now 时间 早于 of 时间...");
}
12.处理时区
ZoneId of = ZoneId.of("America/New_York");
LocalDateTime now = LocalDateTime.now();
ZonedDateTime of1 = ZonedDateTime.of(now, of);
System.out.println("现在的日期和时间在特定的时区 : "+ of1);
13.如何体现出固定日期
YearMonth now = YearMonth.now();
YearMonth of = YearMonth.of(2022, 9);
System.out.println(now);
System.out.printf("这月有%d天", of.lengthOfMonth());
14.检查闰年
LocalDate now = LocalDate.now();
if (now.isLeapYear()) {
System.out.println("今年是闰年...");
} else {
System.out.println("今年不是闰年...");
}
15.计算两个日期之间的天数和月数
LocalDate now = LocalDate.now();
LocalDate of = LocalDate.of(2022, 6, 20);
Period between = Period.between(now, of);
System.out.println("两月天数相差:"+ between.getDays());
16.获取当前的时间戳
System.out.println(Instant.now());
17.使用预定义的格式化工具去解析或格式化日期
String parse = "20220926";
LocalDate parse1 = LocalDate.parse(parse, DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(parse1);