1. 前言
瞧一瞧Java8
新增的日期类。
看一看具体用法。
2. 新日期类
Java8
使用LocalDateTime
替代之前的Date
;
LocalDateTime
又可拆分为LocalDate
和LocalTime
。
看看具体如何使用。
2.1 LocalDate
// 当前日期
LocalDate ld = LocalDate.now();
System.out.println("当前时间:" + ld);
// 获取年月日
System.out.printf("year=%d, month=%d, day=%d \n", ld.getYear(), ld.getMonthValue(), ld.getDayOfMonth());
// 构造日期
ld = LocalDate.of(2020, 10, 8);
System.out.println("构造日期:" + ld);
2.2 LocalTime
// 当前时间
LocalTime lt = LocalTime.now();
System.out.println("当前时间:" + lt);
// 获取时分秒
System.out.printf("hour=%d, minute=%d, second=%d \n", lt.getHour(), lt.getMinute(), lt.getSecond());
// 构造时间
lt = LocalTime.of(17, 29, 30);
System.out.println("构造时间:" + lt);
2.3 LocalDateTime
// 当前日期时间
LocalDateTime ldt = LocalDateTime.now();
System.out.println("当前日期时间:" + ldt);
// 获取年月日
System.out.printf("year=%d, month=%d, day=%d \n", ldt.getYear(), ldt.getMonthValue(), ldt.getDayOfMonth());
System.out.printf("hour=%d, minute=%d, second=%d \n", ldt.getHour(), ldt.getMinute(), ldt.getSecond());
// 构造日期时间
LocalDateTime buildLdt = LocalDateTime.of(2020, 10, 5, 18, 00, 30);
System.out.println("构造日期时间:" + buildLdt);
3. 日期比较与计算
3.1 日期比较
// 判断两个日期是否相等
LocalDate firstDate = LocalDate.now();
LocalDate secondDate = LocalDate.of(2020, 10, 5);
System.out.println("日期一致否?" + firstDate.equals(secondDate));
// 判断两个日期前后关系
LocalDate lt1 = LocalDate.of(2019, 1, 1);
LocalDate lt2 = LocalDate.now();
System.out.println("lt2 是在 lt1 之后吗?" + lt2.isAfter(lt1));
System.out.println("lt1 是在 lt2 之前吗?" + lt1.isBefore(lt2));
3.2 日期计算
// 三天后
LocalDate afterThreeDays = LocalDate.now().plusDays(3);
System.out.println("三天后:" + afterThreeDays);
// 三天前
LocalDate threeDaysAgo = LocalDate.now().minusDays(3);
System.out.println("三天前:" + threeDaysAgo);
// 计算两个日期之差
LocalDate now = LocalDate.now();
LocalDate date = LocalDate.parse("2020-10-31");
long day1 = now.toEpochDay();
long day2 = date.toEpochDay();
long day = day2 - day1;
System.out.printf("当前时间相较于 2020-10-01 相差 %d 天 \n", day);
3. 日期格式化
相较于之前的SimpleDateFormat
来说,DateTimeFormatter
是线程安全的。
// 获取日期字符串
String now1 = LocalDateTime.now().withNano(0).toString().replace("T", " ");
String now2 = LocalDate.now() + " " + LocalTime.now().withNano(0);
System.out.println("now1: " + now1);
System.out.println("now2: " + now2);
// 获取格式化日期字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String nowText = LocalDateTime.now().format(formatter);
System.out.println("nowText: " + nowText);
// string to date
String dateText = "2020-10-05 19:18:38";
LocalDateTime datetime = LocalDateTime.parse(dateText, formatter);
System.out.println("datetime: " + datetime);
4. 时区
Java8
不仅细分了日期和时间,还把时区也分出来了。
// 上海时间
ZoneId shanghaiZoneId = ZoneId.of("Asia/Shanghai");
ZonedDateTime shanghaiZonedDateTime = ZonedDateTime.now(shanghaiZoneId);
// 东京时间
ZoneId tokyoZoneId = ZoneId.of("Asia/Tokyo");
ZonedDateTime tokyoZonedDateTime = ZonedDateTime.now(tokyoZoneId);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("上海时间: " + shanghaiZonedDateTime.format(formatter));
System.out.println("东京时间: " + tokyoZonedDateTime.format(formatter));