前言
最近在重构之前的一个老我的项目,其中蕴含一个统计模块,须要把存储在 MongoDB 的数据通过接口显示在后端管理系统中。这些数据大多是以工夫为单位进行存储,例如:collectionName_202009collectionName_20200910,在老零碎中对工夫的解决应用 Date 类,简略理解了其中的工夫工具类,深感繁琐并决定应用 Java8 中的 LocalDateTime 和 LocalDate 重构此代码。
一、根本应用
- 获取以后工夫
// 2020-08-23T20:14:56.977
LocalDateTime localDateTime = LocalDateTime.now();
//2020-08-23
LocalDate localDate = LocalDate.now();
- 格式化工夫
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.SIMPLIFIED_CHINESE);
// 2020-08-23 20:20:29
String timeStr = localDateTime.format(localDateTimeFormatter);
LocalDate localDate = LocalDate.now();
DateTimeFormatter localDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 2020-08-23
String dateStr = localDate.format(localDateFormatter);
- 获取昨天、今天或者固定天数的工夫
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.SIMPLIFIED_CHINESE);
// 明天
String time = localDateTime.format(localDateTimeFormatter);
// 昨天
LocalDateTime yesterday = localDateTime.minusDays(1L);
String yesterdayStr = yesterday.format(localDateTimeFormatter);
// 先天
LocalDateTime tomorrow = localDateTime.plusDays(1L);
String tomorrowStr = tomorrow.format(localDateTimeFormatter);
// 天数加 5
LocalDateTime timePlus = localDateTime.plusDays(5L);
String timePlusStr = timePlus.format(localDateTimeFormatter);
// 天数减 5
LocalDateTime timeMinus = localDateTime.minusDays(5L);
String timeMinusStr = timeMinus.format(localDateTimeFormatter);
在 LocalDateTime 的 API 中蕴含了对各个工夫单位的减少和缩小,如:
- 获取明天的开始工夫和完结工夫, 准确到秒
DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.SIMPLIFIED_CHINESE);
// 2020-08-23 00:00:00
String start = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).format(localDateTimeFormatter);
// 2020-08-23 23:59:59
String end = LocalDateTime.of(LocalDate.now(), LocalTime.MAX).format(localDateTimeFormatter);
// 这里的 LocalDate.now() 示意获取明天的开始工夫和完结工夫, 也能够换做任何一天
- 获取当月的第一天和最初一天
// 这里应用 LocalDate 来获取日期
DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.SIMPLIFIED_CHINESE);
LocalDate localDate = LocalDate.now();
LocalDate firstDay = localDate.with(TemporalAdjusters.firstDayOfMonth());
LocalDate lastDay = localDate.with(TemporalAdjusters.lastDayOfMonth());
- 将工夫字符串转为工夫或日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.SIMPLIFIED_CHINESE);
String str = "2018-08-09 20:10:10";
LocalDateTime localDateTime = LocalDateTime.parse(str, formatter);
LocalDate localDate = LocalDate.parse(str, formatter);
- 计算日期距离
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.SIMPLIFIED_CHINESE);
String str = "2020-09-02";
LocalDate localDate = LocalDate.parse(str, formatter);
long until = LocalDate.now().until(localDate, ChronoUnit.DAYS);
原文地址:https://www.haicheng.website/…