Java8中常用的日期時間工具類總結(jié)
更新時間:2023年07月16日 14:31:22 作者:qq_44438941
這篇文章主要為大家詳細介紹了Java8中常用的三個日期時間工具類,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
本文提供了3種日期時間工具類,大家可以任選一種使用
第一種
import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.Period; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalUnit; import java.util.Calendar; import java.util.Date; public class DateUtils { private static final String DATE_FORMAT = "yyyy-MM-dd"; private static final String TIME_FORMAT = "HH:mm:ss"; private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss"); private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); /** * 格式化日期 * * @param date * @return yyyy-MM-dd */ public static String getFormatDate(Date date) { SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT); return format.format(date); } /** * 格式化時間 * * @param date * @return HH:mm:ss */ public static String getFormatTime(Date date) { SimpleDateFormat format = new SimpleDateFormat(TIME_FORMAT); return format.format(date); } /** * 格式化日期及時間 * * @param date * @return yyyy-MM-dd HH:mm:ss */ public static String getFormatDateTime(Date date) { SimpleDateFormat format = new SimpleDateFormat(DATE_TIME_FORMAT); return format.format(date); } /** * 格式化日期 * * @param localDate * @return */ public static String getFormatDate(LocalDate localDate) { return localDate.format(DATE_FORMATTER); } /** * 格式化時間 * * @param localDate * @return */ public static String getFormatTime(LocalDateTime localDateTime) { return localDateTime.format(TIME_FORMATTER); } /** * 格式化日期及時間 * * @param localDate * @return */ public static String getFormatDateTime(LocalDateTime localDateTime) { return localDateTime.format(DATE_TIME_FORMATTER); } /** * 日期時間字符串轉(zhuǎn)LocalDateTime * * @param dateStr * @return */ public static LocalDateTime dateStrToLocalDateTime(String dateStr) { return LocalDateTime.parse(dateStr, DATE_TIME_FORMATTER); } /** * 日期字符串轉(zhuǎn)LocalDate * * @param dateStr * @return */ public static LocalDate dateStrToLocalDate(String dateStr) { return LocalDate.parse(dateStr, DATE_FORMATTER); } /** * 日期字符串 轉(zhuǎn) Date * * @param dateStr * @return */ public static Date dateStrToDate(String dateStr) { return Date.from(LocalDate.parse(dateStr, DATE_FORMATTER).atStartOfDay(ZoneId.systemDefault()).toInstant()); } /** * 日期時間字符串 轉(zhuǎn) Date * * @param dateStr * @return */ public static Date dateTimeStrToDate(String dateStr) { return Date.from(LocalDateTime.parse(dateStr, DATE_TIME_FORMATTER).atZone(ZoneId.systemDefault()).toInstant()); } /** * LocalDate 轉(zhuǎn) Date * * @param localDate * @return */ public static Date localDateToDate(LocalDate localDate) { return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); } /** * LocalDateTime 轉(zhuǎn) Date * * @param localDateTime * @return */ public static Date localDateTimeToDate(LocalDateTime localDateTime) { return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); } /** * Date 轉(zhuǎn) LocalDate * * @return */ public static LocalDate dateToLocalDate(Date date) { return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); } /** * Date 轉(zhuǎn) LocalDateTime * * @param date * @return */ public static LocalDateTime dateToLocalDateTime(Date date) { return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); } /** * 計算兩個日期時間差 * * @param start yyyy-MM-dd HH:mm:ss * @param end yyyy-MM-dd HH:mm:ss * @return */ public static long dateDifference(String start, String end) { SimpleDateFormat format = new SimpleDateFormat(DATE_TIME_FORMAT); try { Date startTime = format.parse(start); Date endTime = format.parse(end); return endTime.getTime() - startTime.getTime(); } catch (ParseException e) { e.printStackTrace(); } return -1; } /** * 計算兩個日期之間的天數(shù)差 * * @param start 2018-03-01 12:00:00 * @param end 2018-03-12 12:00:00 * @return */ public static long calculationDays(String start, String end) { SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date fromDate = simpleFormat.parse(start); Date toDate = simpleFormat.parse(end); long from = fromDate.getTime(); long to = toDate.getTime(); long days = (int) ((to - from) / (1000 * 60 * 60 * 24)); return days; } catch (ParseException e) { e.printStackTrace(); } return -1; } /** * 計算小時差 * * @param start * @param end * @return */ public static long calculationHours(String start, String end) { SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date fromDate = simpleFormat.parse(start); Date toDate = simpleFormat.parse(end); long from = fromDate.getTime(); long to = toDate.getTime(); long hours = (int) ((to - from) / (1000 * 60 * 60)); return hours; } catch (ParseException e) { e.printStackTrace(); } return -1; } /** * 計算分鐘差 * * @param start * @param end * @return */ public static long calculationMinutes(String start, String end) { SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date fromDate = simpleFormat.parse(start); Date toDate = simpleFormat.parse(end); long from = fromDate.getTime(); long to = toDate.getTime(); long minutes = (int) ((to - from) / (1000 * 60)); return minutes; } catch (ParseException e) { e.printStackTrace(); } return -1; } /** * 計算兩個日期之間的秒數(shù)差 * @param start * @param end * @return */ public static long calculationSecond(String start, String end) { SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date fromDate = simpleFormat.parse(start); Date toDate = simpleFormat.parse(end); long from = fromDate.getTime(); long to = toDate.getTime(); long seconds = (int) ((to - from) / 1000); return seconds; } catch (ParseException e) { e.printStackTrace(); } return -1; } /** * 獲取兩個日期的差 field參數(shù)為ChronoUnit.* * @param startTime * @param endTime * @param field 單位(年月日時分秒) * @return */ public static long betweenTwoTime(LocalDateTime startTime, LocalDateTime endTime, ChronoUnit field) { Period period = Period.between(LocalDate.from(startTime), LocalDate.from(endTime)); if (field == ChronoUnit.YEARS) return period.getYears(); if (field == ChronoUnit.MONTHS) return period.getYears() * 12 + period.getMonths(); return field.between(startTime, endTime); } /** * 日期加上一個數(shù),根據(jù)field不同加不同值,field為ChronoUnit.* * @param time * @param number * @param field * @return */ public static LocalDateTime plus(LocalDateTime time, long number, TemporalUnit field) { return time.plus(number, field); } /** * 日期減去一個數(shù),根據(jù)field不同減不同值,field參數(shù)為ChronoUnit.* * @param time * @param number * @param field * @return */ public static LocalDateTime minu(LocalDateTime time, long number, TemporalUnit field){ return time.minus(number,field); } /** * 根據(jù)field不同加減不同值 * @param date * @param field Calendar.YEAR * @param number 1000/-1000 */ public static Date calculationDate(Date date, int field, int number) { Calendar calendar = Calendar.getInstance(); calendar.add(field, number); return calendar.getTime(); } /** * 比較兩個日期先后 * @param date1 * @param date2 * @return */ public static boolean compareDate(Date firstDate, Date secondDate) { return firstDate.getTime() < secondDate.getTime(); } /** * 比較第一個日期是否大于第二個日期 * @param firstDate 第一個日期 * @param secondDate 第二個日期 * @return true-大于;false-不大于 */ public boolean localDateIsBefore(LocalDate firstDate, LocalDate secondDate) { return firstDate.isBefore(secondDate); } public static void main(String[] args) { Date date = new Date(); LocalDateTime localDate = DateUtils.dateToLocalDateTime(date); System.out.println(localDate); String start = "2020-03-01 12:00:00"; String end = "2022-03-12 12:01:00"; long seconds = DateUtils.calculationSecond(start, end); System.out.println("相差秒數(shù): " + seconds); long minutes = DateUtils.calculationMinutes(start, end); System.out.println("相差分鐘數(shù): " + minutes); long days = DateUtils.calculationDays(start, end); System.out.println("相差天數(shù): " + days); LocalDateTime startTime = LocalDateTime.of(2000, 10, 13, 11, 11); LocalDateTime endTime = LocalDateTime.of(2000, 10, 14, 13, 13); long time = DateUtils.betweenTwoTime(startTime, endTime, ChronoUnit.SECONDS); System.out.println(time); date = DateUtils.calculationDate(date, Calendar.DATE, -10); System.out.println("減去10天: " + DateUtils.getFormatDate(date)); } }
第二種
/** * Java8日期時間工具類 * * @author * @date */ public class LocalDateUtils { /** * 顯示年月日時分秒,例如 2015-08-11 09:51:53. */ public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; /** * 僅顯示年月日,例如 2015-08-11. */ public static final String DATE_PATTERN = "yyyy-MM-dd"; /** * 僅顯示時分秒,例如 09:51:53. */ public static final String TIME_PATTERN = "HH:mm:ss"; /** * 顯示年月日時分秒(無符號),例如 20150811095153. */ public static final String UNSIGNED_DATETIME_PATTERN = "yyyyMMddHHmmss"; /** * 僅顯示年月日(無符號),例如 20150811. */ public static final String UNSIGNED_DATE_PATTERN = "yyyyMMdd"; /** * 春天; */ public static final Integer SPRING = 1; /** * 夏天; */ public static final Integer SUMMER = 2; /** * 秋天; */ public static final Integer AUTUMN = 3; /** * 冬天; */ public static final Integer WINTER = 4; /** * 星期日; */ public static final String SUNDAY = "星期日"; /** * 星期一; */ public static final String MONDAY = "星期一"; /** * 星期二; */ public static final String TUESDAY = "星期二"; /** * 星期三; */ public static final String WEDNESDAY = "星期三"; /** * 星期四; */ public static final String THURSDAY = "星期四"; /** * 星期五; */ public static final String FRIDAY = "星期五"; /** * 星期六; */ public static final String SATURDAY = "星期六"; /** * 年 */ private static final String YEAR = "year"; /** * 月 */ private static final String MONTH = "month"; /** * 周 */ private static final String WEEK = "week"; /** * 日 */ private static final String DAY = "day"; /** * 時 */ private static final String HOUR = "hour"; /** * 分 */ private static final String MINUTE = "minute"; /** * 秒 */ private static final String SECOND = "second"; /** * 獲取當前日期和時間字符串. * * @return String 日期時間字符串,例如 2015-08-11 09:51:53 */ public static String getLocalDateTimeStr() { return format(LocalDateTime.now(), DATETIME_PATTERN); } /** * 獲取當前日期字符串. * * @return String 日期字符串,例如2015-08-11 */ public static String getLocalDateStr() { return format(LocalDate.now(), DATE_PATTERN); } /** * 獲取當前時間字符串. * * @return String 時間字符串,例如 09:51:53 */ public static String getLocalTimeStr() { return format(LocalTime.now(), TIME_PATTERN); } /** * 獲取當前星期字符串. * * @return String 當前星期字符串,例如 星期二 */ public static String getDayOfWeekStr() { return format(LocalDate.now(), "E"); } /** * 獲取指定日期是星期幾 * * @param localDate 日期 * @return String 星期幾 */ public static String getDayOfWeekStr(LocalDate localDate) { String[] weekOfDays = {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}; int dayOfWeek = localDate.getDayOfWeek().getValue() - 1; return weekOfDays[dayOfWeek]; } /** * 獲取日期時間字符串 * * @param temporal 需要轉(zhuǎn)化的日期時間 * @param pattern 時間格式 * @return String 日期時間字符串,例如 2015-08-11 09:51:53 */ public static String format(TemporalAccessor temporal, String pattern) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern); return dateTimeFormatter.format(temporal); } /** * 日期時間字符串轉(zhuǎn)換為日期時間(java.time.LocalDateTime) * * @param localDateTimeStr 日期時間字符串 * @param pattern 日期時間格式 例如DATETIME_PATTERN * @return LocalDateTime 日期時間 */ public static LocalDateTime parseLocalDateTime(String localDateTimeStr, String pattern) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern); return LocalDateTime.parse(localDateTimeStr, dateTimeFormatter); } /** * 日期字符串轉(zhuǎn)換為日期(java.time.LocalDate) * * @param localDateStr 日期字符串 * @param pattern 日期格式 例如DATE_PATTERN * @return LocalDate 日期 */ public static LocalDate parseLocalDate(String localDateStr, String pattern) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern); return LocalDate.parse(localDateStr, dateTimeFormatter); } /** * 獲取指定日期時間加上指定數(shù)量日期時間單位之后的日期時間. * * @param localDateTime 日期時間 * @param num 數(shù)量 * @param chronoUnit 日期時間單位 * @return LocalDateTime 新的日期時間 */ public static LocalDateTime plus(LocalDateTime localDateTime, int num, ChronoUnit chronoUnit) { return localDateTime.plus(num, chronoUnit); } /** * 獲取指定日期時間減去指定數(shù)量日期時間單位之后的日期時間. * * @param localDateTime 日期時間 * @param num 數(shù)量 * @param chronoUnit 日期時間單位 * @return LocalDateTime 新的日期時間 */ public static LocalDateTime minus(LocalDateTime localDateTime, int num, ChronoUnit chronoUnit) { return localDateTime.minus(num, chronoUnit); } /** * 根據(jù)ChronoUnit計算兩個日期時間之間相隔日期時間 * * @param start 開始日期時間 * @param end 結(jié)束日期時間 * @param chronoUnit 日期時間單位 * @return long 相隔日期時間 */ public static long getChronoUnitBetween(LocalDateTime start, LocalDateTime end, ChronoUnit chronoUnit) { return Math.abs(start.until(end, chronoUnit)); } /** * 根據(jù)ChronoUnit計算兩個日期之間相隔年數(shù)或月數(shù)或天數(shù) * * @param start 開始日期 * @param end 結(jié)束日期 * @param chronoUnit 日期時間單位,(ChronoUnit.YEARS,ChronoUnit.MONTHS,ChronoUnit.WEEKS,ChronoUnit.DAYS) * @return long 相隔年數(shù)或月數(shù)或天數(shù) */ public static long getChronoUnitBetween(LocalDate start, LocalDate end, ChronoUnit chronoUnit) { return Math.abs(start.until(end, chronoUnit)); } /** * 獲取本年第一天的日期字符串 * * @return String 格式:yyyy-MM-dd 00:00:00 */ public static String getFirstDayOfYearStr() { return getFirstDayOfYearStr(LocalDateTime.now()); } /** * 獲取本年最后一天的日期字符串 * * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getLastDayOfYearStr() { return getLastDayOfYearStr(LocalDateTime.now()); } /** * 獲取指定日期當年第一天的日期字符串 * * @param localDateTime 指定日期時間 * @return String 格式:yyyy-MM-dd 00:00:00 */ public static String getFirstDayOfYearStr(LocalDateTime localDateTime) { return getFirstDayOfYearStr(localDateTime, DATETIME_PATTERN); } /** * 獲取指定日期當年最后一天的日期字符串 * * @param localDateTime 指定日期時間 * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getLastDayOfYearStr(LocalDateTime localDateTime) { return getLastDayOfYearStr(localDateTime, DATETIME_PATTERN); } /** * 獲取指定日期當年第一天的日期字符串,帶日期格式化參數(shù) * * @param localDateTime 指定日期時間 * @param pattern 日期時間格式 * @return String 格式:yyyy-MM-dd 00:00:00 */ public static String getFirstDayOfYearStr(LocalDateTime localDateTime, String pattern) { return format(localDateTime.withDayOfYear(1).withHour(0).withMinute(0).withSecond(0), pattern); } /** * 獲取指定日期當年最后一天的日期字符串,帶日期格式化參數(shù) * * @param localDateTime 指定日期時間 * @param pattern 日期時間格式 * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getLastDayOfYearStr(LocalDateTime localDateTime, String pattern) { return format(localDateTime.with(TemporalAdjusters.lastDayOfYear()).withHour(23).withMinute(59).withSecond(59), pattern); } /** * 獲取本月第一天的日期字符串 * * @return String 格式:yyyy-MM-dd 00:00:00 */ public static String getFirstDayOfMonthStr() { return getFirstDayOfMonthStr(LocalDateTime.now()); } /** * 獲取本月最后一天的日期字符串 * * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getLastDayOfMonthStr() { return getLastDayOfMonthStr(LocalDateTime.now()); } /** * 獲取指定日期當月第一天的日期字符串 * * @param localDateTime 指定日期時間 * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getFirstDayOfMonthStr(LocalDateTime localDateTime) { return getFirstDayOfMonthStr(localDateTime, DATETIME_PATTERN); } /** * 獲取指定日期當月最后一天的日期字符串 * * @param localDateTime 指定日期時間 * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getLastDayOfMonthStr(LocalDateTime localDateTime) { return getLastDayOfMonthStr(localDateTime, DATETIME_PATTERN); } /** * 獲取指定日期當月第一天的日期字符串,帶日期格式化參數(shù) * * @param localDateTime 指定日期時間 * @return String 格式:yyyy-MM-dd 00:00:00 */ public static String getFirstDayOfMonthStr(LocalDateTime localDateTime, String pattern) { return format(localDateTime.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0), pattern); } /** * 獲取指定日期當月最后一天的日期字符串,帶日期格式化參數(shù) * * @param localDateTime 指定日期時間 * @param pattern 日期時間格式 * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getLastDayOfMonthStr(LocalDateTime localDateTime, String pattern) { return format(localDateTime.with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59), pattern); } /** * 獲取本周第一天的日期字符串 * * @return String 格式:yyyy-MM-dd 00:00:00 */ public static String getFirstDayOfWeekStr() { return getFirstDayOfWeekStr(LocalDateTime.now()); } /** * 獲取本周最后一天的日期字符串 * * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getLastDayOfWeekStr() { return getLastDayOfWeekStr(LocalDateTime.now()); } /** * 獲取指定日期當周第一天的日期字符串,這里第一天為周一 * * @param localDateTime 指定日期時間 * @return String 格式:yyyy-MM-dd 00:00:00 */ public static String getFirstDayOfWeekStr(LocalDateTime localDateTime) { return getFirstDayOfWeekStr(localDateTime, DATETIME_PATTERN); } /** * 獲取指定日期當周最后一天的日期字符串,這里最后一天為周日 * * @param localDateTime 指定日期時間 * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getLastDayOfWeekStr(LocalDateTime localDateTime) { return getLastDayOfWeekStr(localDateTime, DATETIME_PATTERN); } /** * 獲取指定日期當周第一天的日期字符串,這里第一天為周一,帶日期格式化參數(shù) * * @param localDateTime 指定日期時間 * @param pattern 日期時間格式 * @return String 格式:yyyy-MM-dd 00:00:00 */ public static String getFirstDayOfWeekStr(LocalDateTime localDateTime, String pattern) { return format(localDateTime.with(DayOfWeek.MONDAY).withHour(0).withMinute(0).withSecond(0), pattern); } /** * 獲取指定日期當周最后一天的日期字符串,這里最后一天為周日,帶日期格式化參數(shù) * * @param localDateTime 指定日期時間 * @param pattern 日期時間格式 * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getLastDayOfWeekStr(LocalDateTime localDateTime, String pattern) { return format(localDateTime.with(DayOfWeek.SUNDAY).withHour(23).withMinute(59).withSecond(59), pattern); } /** * 獲取今天開始時間的日期字符串 * * @return String 格式:yyyy-MM-dd 00:00:00 */ public static String getStartTimeOfDayStr() { return getStartTimeOfDayStr(LocalDateTime.now()); } /** * 獲取今天結(jié)束時間的日期字符串 * * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getEndTimeOfDayStr() { return getEndTimeOfDayStr(LocalDateTime.now()); } /** * 獲取指定日期開始時間的日期字符串 * * @param localDateTime 指定日期時間 * @return String 格式:yyyy-MM-dd 00:00:00 */ public static String getStartTimeOfDayStr(LocalDateTime localDateTime) { return getStartTimeOfDayStr(localDateTime, DATETIME_PATTERN); } /** * 獲取指定日期結(jié)束時間的日期字符串 * * @param localDateTime 指定日期時間 * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getEndTimeOfDayStr(LocalDateTime localDateTime) { return getEndTimeOfDayStr(localDateTime, DATETIME_PATTERN); } /** * 獲取指定日期開始時間的日期字符串,帶日期格式化參數(shù) * * @param localDateTime 指定日期時間 * @param pattern 日期時間格式 * @return String 格式:yyyy-MM-dd HH:mm:ss */ public static String getStartTimeOfDayStr(LocalDateTime localDateTime, String pattern) { return format(localDateTime.withHour(0).withMinute(0).withSecond(0), pattern); } /** * 獲取指定日期結(jié)束時間的日期字符串,帶日期格式化參數(shù) * * @param localDateTime 指定日期時間 * @param pattern 日期時間格式 * @return String 格式:yyyy-MM-dd 23:59:59 */ public static String getEndTimeOfDayStr(LocalDateTime localDateTime, String pattern) { return format(localDateTime.withHour(23).withMinute(59).withSecond(59), pattern); } /** * 切割日期。按照周期切割成小段日期段。例如: <br> * * @param startDate 開始日期(yyyy-MM-dd) * @param endDate 結(jié)束日期(yyyy-MM-dd) * @param period 周期(天,周,月,年) * @return 切割之后的日期集合 * <li>startDate="2019-02-28",endDate="2019-03-05",period="day"</li> * <li>結(jié)果為:[2019-02-28, 2019-03-01, 2019-03-02, 2019-03-03, 2019-03-04, 2019-03-05]</li><br> * <li>startDate="2019-02-28",endDate="2019-03-25",period="week"</li> * <li>結(jié)果為:[2019-02-28,2019-03-06, 2019-03-07,2019-03-13, 2019-03-14,2019-03-20, * 2019-03-21,2019-03-25]</li><br> * <li>startDate="2019-02-28",endDate="2019-05-25",period="month"</li> * <li>結(jié)果為:[2019-02-28,2019-02-28, 2019-03-01,2019-03-31, 2019-04-01,2019-04-30, * 2019-05-01,2019-05-25]</li><br> * <li>startDate="2019-02-28",endDate="2020-05-25",period="year"</li> * <li>結(jié)果為:[2019-02-28,2019-12-31, 2020-01-01,2020-05-25]</li><br> */ public static List<String> listDateStrs(String startDate, String endDate, String period) { List<String> result = new ArrayList<>(); DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_PATTERN); LocalDate end = LocalDate.parse(endDate, dateTimeFormatter); LocalDate start = LocalDate.parse(startDate, dateTimeFormatter); LocalDate tmp = start; switch (period) { case DAY: while (start.isBefore(end) || start.isEqual(end)) { result.add(start.toString()); start = start.plusDays(1); } break; case WEEK: while (tmp.isBefore(end) || tmp.isEqual(end)) { if (tmp.plusDays(6).isAfter(end)) { result.add(tmp.toString() + "," + end); } else { result.add(tmp.toString() + "," + tmp.plusDays(6)); } tmp = tmp.plusDays(7); } break; case MONTH: while (tmp.isBefore(end) || tmp.isEqual(end)) { LocalDate lastDayOfMonth = tmp.with(TemporalAdjusters.lastDayOfMonth()); if (lastDayOfMonth.isAfter(end)) { result.add(tmp.toString() + "," + end); } else { result.add(tmp.toString() + "," + lastDayOfMonth); } tmp = lastDayOfMonth.plusDays(1); } break; case YEAR: while (tmp.isBefore(end) || tmp.isEqual(end)) { LocalDate lastDayOfYear = tmp.with(TemporalAdjusters.lastDayOfYear()); if (lastDayOfYear.isAfter(end)) { result.add(tmp.toString() + "," + end); } else { result.add(tmp.toString() + "," + lastDayOfYear); } tmp = lastDayOfYear.plusDays(1); } break; default: break; } return result; } public static void main(String[] args) { System.out.println(getLocalDateTimeStr()); System.out.println(getLocalDateStr()); System.out.println(getLocalTimeStr()); System.out.println(getDayOfWeekStr()); System.out.println(getDayOfWeekStr(LocalDate.now())); System.out.println("========"); System.out.println(format(LocalDate.now(), UNSIGNED_DATE_PATTERN)); System.out.println("========"); System.out.println(parseLocalDateTime("2020-12-13 11:14:12", DATETIME_PATTERN)); System.out.println(parseLocalDate("2020-12-13", DATE_PATTERN)); System.out.println("========"); System.out.println(plus(LocalDateTime.now(), 3, ChronoUnit.HOURS)); System.out.println(minus(LocalDateTime.now(), 4, ChronoUnit.DAYS)); System.out.println("========"); System.out.println(getChronoUnitBetween(LocalDateTime.now(), parseLocalDateTime("2020-12-12 12:03:12", DATETIME_PATTERN), ChronoUnit.MINUTES)); System.out.println(getChronoUnitBetween(LocalDate.now(), parseLocalDate("2021-12-12", DATE_PATTERN), ChronoUnit.WEEKS)); System.out.println("========"); System.out.println(getFirstDayOfYearStr()); System.out.println(getFirstDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN))); System.out.println(getFirstDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN)); System.out.println(getLastDayOfYearStr()); System.out.println(getLastDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN))); System.out.println(getLastDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN)); System.out.println("========"); System.out.println(getFirstDayOfMonthStr()); System.out.println(getFirstDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN))); System.out.println(getFirstDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN)); System.out.println(getLastDayOfMonthStr()); System.out.println(getLastDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN))); System.out.println(getLastDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN)); System.out.println("========"); System.out.println(getFirstDayOfWeekStr()); System.out.println(getFirstDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN))); System.out.println(getFirstDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN)); System.out.println(getLastDayOfWeekStr()); System.out.println(getLastDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN))); System.out.println(getLastDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN)); System.out.println("========"); System.out.println(getStartTimeOfDayStr()); System.out.println(getStartTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN))); System.out.println(getStartTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN)); System.out.println(getEndTimeOfDayStr()); System.out.println(getEndTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN))); System.out.println(getEndTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN)); System.out.println("========"); List<String> dateStrs = listDateStrs("2019-01-30", "2020-12-13", YEAR); for (String dateStr : dateStrs) { System.out.println(dateStr); } System.out.println("========"); List<String> dateStrs1 = listDateStrs("2019-01-30", "2020-12-13", MONTH); for (String dateStr : dateStrs1) { System.out.println(dateStr); } System.out.println("========"); List<String> dateStrs2 = listDateStrs("2020-12-01", "2020-12-13", DAY); for (String dateStr : dateStrs2) { System.out.println(dateStr); } } }
第三種
package com....; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.joda.time.Days; import org.joda.time.LocalDate; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * @version V1.0 * @File: DateUtils * @Description: 常用的時間處理方法集合工具類 * @author: aitree */ public class DateUtils { /** * 時間格式常量 */ public static final String COMMON_PATTERN = "yyyy-MM-dd HH:mm:ss"; public static final String COMMON_PATTERN_TYPE2 = "yyyy/MM/dd HH:mm:ss"; public static final String SHORT_PATTERN = "yyyy-MM-dd"; public static final String SHORT_PATTERN_TYPE2 = "yyyy/MM/dd"; public static final String LONG_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS"; public static final String SUP_SHORT_PATTERN = "yyyyMMdd"; public static final String SUP_LONG_PATTERN = "yyyyMMddHHmmss"; public static final String YEAR_MONTH = "yyyyMM"; public static final String CN_SHORT_PATTERN = "yyyy年MM月dd日"; public static final String DDMM_PATTERN = "ddMM"; /** * 1、將 String 解析為 date * * @param dateString 待解析的日期字符串 * @param pattern 日期字符串的時間格式 * @return */ public static Date trans2Date(String dateString, String pattern) { String fRTN = StringUtils.isNotBlank(pattern) ? pattern : COMMON_PATTERN; DateTimeFormatter format = DateTimeFormat.forPattern(fRTN); DateTime dt = DateTime.parse(dateString, format); return dt.toDate(); } /** */2、日期字符串格式化輸出 * * @param dateString 待格式化的日期字符串 * @param fromPattern 待格式化日期字符串的格式 * @param toPattern 格式化后的日期格式 * @return */ public static String formatDate2String(String dateString, String fromPattern, String toPattern) { String tRTN = StringUtils.isNotBlank(toPattern) ? toPattern : COMMON_PATTERN; DateTimeFormatter format = DateTimeFormat.forPattern(fromPattern); DateTime dt = DateTime.parse(dateString, format); return dt.toString(tRTN); } /** * 3、Date類型日期轉(zhuǎn)字符串格式化輸出 * * @param date 待格式化的日期 * @param pattern 格式化后的格式 * @return */ public static String formatDate2String(Date date, String pattern) { String fRTN = StringUtils.isNotBlank(pattern) ? pattern : COMMON_PATTERN; DateTimeFormatter format = DateTimeFormat.forPattern(fRTN); return new DateTime(date).toString(format); } /** * 4、增加天數(shù)后的Date日期 * * @param date 起點日期(date/string) * @param daysCount 增加天數(shù) * @return */ public static <T> Date add(T date, int daysCount) { DateTime dt = new DateTime(date); return dt.plusDays(daysCount).toDate(); } /** * 5、計算日期{@link Date}增加某天數(shù)后的Date類型日期 * * @param d Date * @param amountToAdd 天數(shù)增加值 * @return Date */ public static Date plusDays(Date d, long amountToAdd) { return toDate(plusDays(toLocalDateTime(d), amountToAdd)); } public static LocalDateTime plusDays(LocalDateTime ldt, long amountToAdd) { return ldt.plusDays(amountToAdd); } /** *6、減少天數(shù)后的日期 * * @param date 起點日期(date/string) * @param daysCount 減少的天數(shù) * @return */ public static <T> Date sub(T date, int daysCount) { DateTime dt = new DateTime(date); return dt.minusDays(daysCount).toDate(); } /** * 7、增加月數(shù)后的日期 * * @param date 起點日期(date/string) * @param months 增加月數(shù) * @return */ public static <T> Date addMonths(T date, int months) { DateTime dt = new DateTime(date); return dt.plusMonths(months).toDate(); } /** */8、減少月數(shù)后的日期 * * @param date 起點日期(date/string) * @param months 減少的月數(shù) * @return */ public static <T> Date subMonths(T date, int months) { DateTime dt = new DateTime(date); return dt.minusMonths(months).toDate(); } /** */9、減少年數(shù)后的日期 * * @param date 起點日期(date/string) * @param years 減少的年數(shù) * @return */ public static <T> Date subYears(T date, int years) { DateTime dt = new DateTime(date); return dt.minusYears(years).toDate(); } /** * 10、計算月份差 * @param lastRepaymentDate * @param fundLoanDate * @return */ public static int getMonthParse(String lastRepaymentDate, String fundLoanDate) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); Calendar bef = Calendar.getInstance(); Calendar aft = Calendar.getInstance(); bef.setTime(sdf.parse(fundLoanDate)); aft.setTime(sdf.parse(lastRepaymentDate)); int result = aft.get(Calendar.MONTH) - bef.get(Calendar.MONTH); int month = (aft.get(Calendar.YEAR) - bef.get(Calendar.YEAR))*12; return month+result; } /** * 11、計算兩個日期的間隔天數(shù) * 目前不對兩個日期比較大小,如放錯順序,則結(jié)果為負數(shù)的天數(shù) * * @param dateMin 起點日期(date/string) * @param dateMax 結(jié)束日期(date/string) * @return */ public static <T> int betweenDays(T dateMin, T dateMax) { LocalDate start = new LocalDate(dateMin); LocalDate end = new LocalDate(dateMax); return Days.daysBetween(start, end).getDays(); } /** * 12、計算兩個時間的毫秒間隔 * 目前不對兩個時間參數(shù)比較大小,如放錯順序,則結(jié)果為負數(shù)的毫秒間隔 * * @param dateMin 起點日期(date/string) * @param dateMax 結(jié)束日期(date/string) * @return */ public static <T> long betweenMs(T dateMin, T dateMax) { DateTime start = new DateTime(dateMin); DateTime end = new DateTime(dateMax); return end.getMillis() - start.getMillis(); } /** * 13、判斷是否為交易日/工作日 * * @param date 待判斷日期(date/string) * @return */ public static <T> boolean isTradeDay(T date) { boolean isTD = false; DateTime dt = new DateTime(date); if (isSpWorkDay(dt) || (!isHoliday(dt) && !isWeekEnd(dt))) { isTD = true; } return isTD; } //14、判斷是否是周末*/ private static boolean isWeekEnd(DateTime dt) { boolean isWE = false; int wd = dt.dayOfWeek().get(); switch (wd) { case 6: case 7: isWE = true; break; default: break; } return isWE; } //15、判斷是否為國家法定節(jié)假日*/ private static boolean isHoliday(DateTime dt) { boolean isHD = false; //TODO:get days from redis List<String> holidayList = new ArrayList<String>(); if (holidayList != null) { for (String holiday : holidayList) { if (dt.isEqual(new DateTime(holiday))) { isHD = true; break; } } } return isHD; } //16、判斷是否為國家調(diào)整后的工作日*/ private static boolean isSpWorkDay(DateTime dt) { boolean isSpWD = false; //TODO:get days from redis List<String> spWorkDayList = new ArrayList<String>(); if (spWorkDayList != null) { for (String spWorkDay : spWorkDayList) { if (dt.isEqual(new DateTime(spWorkDay))) { isSpWD = true; break; } } } return isSpWD; } /** */17、獲得時間指定時間差值 日期 * @param: aDate * @param: field 查看 Calendar.MINUTE 、SECOND * @param: diff 時間差 * @return: */ public static final Date diffDate(Date aDate, int field, int diff) { Calendar cal = Calendar.getInstance(); cal.setTime(aDate); cal.add(field, diff); return cal.getTime(); } /** * 18、判斷目標時間是否在區(qū)間內(nèi) * @param sDate 開始時間date/string * @param eDate 結(jié)束時間date/string * @param cDate 目標時間date/string * @param <T> * @return */ public static <T> boolean isInRange(T sDate, T eDate, T cDate){ DateTime dtLow = new DateTime(sDate); DateTime dtHigh = new DateTime(eDate); DateTime dt = new DateTime(cDate); if(dt.getMillis()>=dtLow.getMillis() && dt.getMillis()<=dtHigh.getMillis()){ return true; } return false; } public static <T> boolean isInRange(){ DateTime now = DateTime.now(); return isInRange(now,now,now); } public static <T> boolean isInRange(T sDate, T eDate){ DateTime now = DateTime.now(); return isInRange(sDate,eDate,now); } /** * 19、獲取當前8位系統(tǒng)日期 * * @return yyyyMMdd */ public static String getCurrentDateStr() { return format(LocalDate.now()); } /** */20、獲取當前6位系統(tǒng)時間 * * @return HHmmss */ public static String getCurrentTimeStr() { return format(LocalTime.now()); } /** */21、獲取當前14位系統(tǒng)日期時間 * * @return yyyyMMddHHmmss */ public static String getCurrentDateTimeStr() { return format(LocalDateTime.now()); } /** */22、按指定格式獲取當前系統(tǒng)日期時間 * * @param pattern pattern * @return 格式化的當前系統(tǒng)日期時間 */ public static String getCurrentDateTimeStr(String pattern) { return format(LocalDateTime.now(), pattern); } /** */23、獲取字符串start到end天數(shù)間隔 * * @param start 開始日期,YYYYMMDD * @param end 結(jié)束日期,YYYYMMDD * @return 天數(shù)間隔 */ public static long getDaysBetweenDate(String start, String end) { return toLocalDate(start).until(toLocalDate(end), ChronoUnit.DAYS); } /** */24、獲取Date日期類型start到end天數(shù)間隔 * * @param start 開始日期 * @param end 結(jié)束日期 * @return 天數(shù)間隔 */ public static long getDaysBetween(Date start, Date end) { return getDaysBetween(toLocalDate(start), toLocalDate(end)); } public static LocalDate toLocalDate(Date d) { return toLocalDateTime(d).toLocalDate(); } }
以上就是Java8中常用的日期時間工具類總結(jié)的詳細內(nèi)容,更多關(guān)于Java8日期時間工具類的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
centos7如何通過systemctl啟動springboot服務代替java -jar方式啟動
這篇文章主要介紹了centos7如何通過systemctl啟動springboot服務代替java -jar方式啟動,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01java的MybatisPlus調(diào)用儲存過程的返回數(shù)據(jù)問題
這篇文章主要介紹了java的MybatisPlus調(diào)用儲存過程的返回數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12解決Druid動態(tài)數(shù)據(jù)源配置重復刷錯誤日志的問題
使用druid數(shù)據(jù)庫連接池實現(xiàn)動態(tài)的配置數(shù)據(jù)源功能,在配置過程中出現(xiàn)一個問題既然是用戶自己配置的數(shù)據(jù)源,就無法避免輸入錯誤,連接失敗等情況,關(guān)于這個問題怎么處理呢,今天小編通過本文給大家詳細說明下,感興趣的朋友一起看看吧2021-05-05淺談Java如何實現(xiàn)一個基于LRU時間復雜度為O(1)的緩存
這篇文章主要介紹了淺談Java如何實現(xiàn)一個基于LRU時間復雜度為O(1)的緩存,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08mybatis Map查詢結(jié)果下劃線轉(zhuǎn)駝峰的實例
這篇文章主要介紹了mybatis Map查詢結(jié)果下劃線轉(zhuǎn)駝峰的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09spring boot 1.5.4 web容器定制(端口號等修改)方法
下面小編就為大家?guī)硪黄猻pring boot 1.5.4 web容器定制(端口號等修改)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06