package com.qiake.credit.task.utils; import java.text.ParseException; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.Date; public class DateTimeUtils { public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HHmmss"); public static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter.ofPattern("yyyyMM"); public static final DateTimeFormatter SHORT_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyMMdd"); public static final DateTimeFormatter SHORT_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyMMddHHmmss"); public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd"); public static final DateTimeFormatter DATE_FORMAT_SECOND = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"); public static final DateTimeFormatter DATE_FORMAT_SECOND_ROD = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); public static final DateTimeFormatter DATE_FORMAT_DAY_ROD = DateTimeFormatter.ofPattern("yyyy-MM-dd"); public static final DateTimeFormatter DATE_FORMAT_DAY = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); public static final DateTimeFormatter DATE_FORMAT_DAY_POINT = DateTimeFormatter.ofPattern("yyyy.MM.dd"); public static final DateTimeFormatter DTF_YYYYMMDDHHMMSSSSS = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"); private DateTimeUtils() { throw new IllegalStateException("Utility class"); } public static LocalDate parseLocalDate(String dateStr, DateTimeFormatter formatter) { return LocalDate.parse(dateStr, formatter); } public static LocalDateTime parseLocalDateTime(String dateTimeStr, DateTimeFormatter formatter) { return LocalDateTime.parse(dateTimeStr, formatter); } public static LocalTime parseLocalTime(String timeStr, DateTimeFormatter formatter) { return LocalTime.parse(timeStr, formatter); } public static String formatLocalDate(LocalDate date, DateTimeFormatter formatter) { return date.format(formatter); } public static String formatLocalDateTime(LocalDateTime datetime, DateTimeFormatter formatter) { return datetime.format(formatter); } public static String formatLocalTime(LocalTime time, DateTimeFormatter formatter) { return time.format(formatter); } /** 日期相隔月數 */ public static long periodMonths(LocalDate startDateInclusive, LocalDate endDateExclusive) { return startDateInclusive.until(endDateExclusive, ChronoUnit.MONTHS); } /** 日期相隔月數 */ public static long periodTimeMonths(LocalDateTime startDateInclusive, LocalDateTime endDateExclusive) { return startDateInclusive.until(endDateExclusive, ChronoUnit.MONTHS); } /** 日期相隔天數 */ public static long periodDays(LocalDate startDateInclusive, LocalDate endDateExclusive) { return startDateInclusive.until(endDateExclusive, ChronoUnit.DAYS); } /** * 實現給定某日期,判斷是星期幾 * @param date * @return * @throws ParseException */ public static int getWeekday(LocalDate date) { switch (String.valueOf(date.getDayOfWeek())) { case "MONDAY": return 1; case "TUESDAY": return 2; case "WEDNESDAY": return 3; case "THURSDAY": return 4; case "FRIDAY": return 5; case "SATURDAY": return 6; case "SUNDAY": return 7; default: return 0; } } /*** * 該方法主要要來計算芝麻分更新時間 * 當前日期號數<day,則更新時間爲當月day號,號數>day,爲下個月day號 * @param date * @param day * @return */ public static LocalDate getZhiMaScoreUpdateTime(LocalDate date, int day) { int mDay = date.getDayOfMonth();//獲取當前月份的日期號碼 if (mDay < day) { date = LocalDate.of(date.getYear(), date.getMonth(), day); } else { date = LocalDate.of(date.getYear(), date.getMonth(), day).plusMonths(1); } return date; } /** * 將毫秒時間戳轉化爲String * * @param mill * @return */ public static String convert(String mill) { LocalDateTime dateTime = LocalDateTime.ofEpochSecond(Long.parseLong(mill) / 1000, 0, ZoneOffset.ofHours(8)); return formatLocalDateTime(dateTime, DATE_FORMAT_SECOND_ROD); } /*** * LocalDateTime轉Date * @param localDateTime * @return */ public static Date localDateTimeToDate(LocalDateTime localDateTime) { return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); } /*** * LocalDate轉Date * @param localDateTime * @return */ public static Date localDateToDate(LocalDate localDate) { return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()); } /*** * Date轉LocalDateTime * @param date * @return */ public static LocalDateTime dateToLocalDateTime(Date date) { return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); } /*** * Date轉LocalDate * @param date * @return */ public static LocalDate dateToLocalDate(Date date) { return dateToLocalDateTime(date).toLocalDate(); } /*** * String dateTime 轉 Date * @param str * @param formatter * @return */ public static Date strDateTimeToDate(String str, DateTimeFormatter formatter) { return localDateTimeToDate(parseLocalDateTime(str, formatter)); } /*** * String date 轉 Date * @param str * @param formatter * @return */ public static Date strDateToDate(String str, DateTimeFormatter formatter) { return localDateToDate(parseLocalDate(str, formatter)); } }