【Java8】日期

1. 前言

瞧一瞧Java8新增的日期类。

看一看具体用法。

2. 新日期类

Java8使用LocalDateTime替代之前的Date

LocalDateTime又可拆分为LocalDateLocalTime

看看具体如何使用。

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));

文章作者: 叶遮沉阳
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 叶遮沉阳 !
  目录