java8 日期工具類

import org.apache.commons.lang3.StringUtils; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; import java.util.*; public class DateUtil { static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); static final DateTimeFormatter dtf_yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd"); static final DateTimeFormatter dtf_yyyyMM = DateTimeFormatter.ofPattern("yyyyMM"); static final DateTimeFormatter dtf_yyyyMM2 = DateTimeFormatter.ofPattern("yyyy年MM月"); static final DateTimeFormatter dtf_yyyyMMddHHmmss = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); static final DateTimeFormatter dtf_yyyyMMddHHmm = DateTimeFormatter.ofPattern("yyyyMMddHHmm"); static final DateTimeFormatter dtf_yyyyMMddHH = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); static final DateTimeFormatter dtf_yyyyMMddHHss = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); static final DateTimeFormatter dtf_yyyyMMdd2 = DateTimeFormatter.ofPattern("yyyy-MM-dd"); public static String now(){ return dtf.format(LocalDateTime.now()); } public static String now_yyyyMMdd(){ return dtf_yyyyMMdd.format(LocalDateTime.now()); } public static String now_yyyy(){ return LocalDateTime.now().getYear()+""; } public static int now_yyyy_int(){ return LocalDateTime.now().getYear(); } public static String now_MM(){ int MM = LocalDateTime.now().getMonthValue(); if(MM < 10){ return "0"+MM; } return MM+""; } public static String now_yyyyMM(){ return dtf_yyyyMM.format(LocalDateTime.now()); } public static int now_MM_int(){ return LocalDateTime.now().getMonthValue(); } public static int now_day_int(){ return LocalDateTime.now().getDayOfMonth(); } public static int now_day_int(long modified){ return Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime().getDayOfMonth(); } public static String fmt(long modified){ return dtf_yyyyMMdd.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime()); } public static String fmt_yyyyMM(long modified){ return dtf_yyyyMM.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime()); } public static String fmt_yyyyMM2(long modified){ return dtf_yyyyMM2.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime()); } public static String fmt_yyyyMMddHHmmss(long modified){ return dtf_yyyyMMddHHss.format(Instant.ofEpochSecond(modified/1000).atZone(ZoneId.systemDefault()).toLocalDateTime()); } /** * 本年已過天數 * @param * @return */ public static long now_dayCount_int(){ return ChronoUnit.DAYS.between(LocalDate.ofYearDay(LocalDate.now().getYear(),1),LocalDate.now()); } public static String now_yyyyMMddHH(){ return dtf_yyyyMMddHH.format(LocalDateTime.now()); } public static String now_yyyyMMdd2(){ return dtf_yyyyMMdd2.format(LocalDateTime.now()); } public static String now_yyyyMMddHHmmss(){ return dtf_yyyyMMddHHmmss.format(LocalDateTime.now()); } //月的第一天日期 public static LocalDate monthFast(int year,int month){ LocalDate start = LocalDate.of(year, month, 1); if (start.getDayOfWeek().getValue() >= 1) { start = start.minusDays(start.getDayOfWeek().getValue()); } return start; } public static LocalDate monthLast(int year,int month){ LocalDate start = LocalDate.of(year, month, 1); start = start.with(TemporalAdjusters.lastDayOfMonth()); if (start.getDayOfWeek().getValue() >= 1) { start = start.minusDays(start.getDayOfWeek().getValue()-1); } return start; } public static LocalDate monthWeekLastDate(int year,int month){ LocalDate start = monthLast(year,month); start = start.plusDays(6); return start; } public static LocalDate monthWeekFastDate(int year,int month){ LocalDate start = LocalDate.of(year, month, 1); if (start.getDayOfWeek().getValue() >= 1) { start = start.minusDays(start.getDayOfWeek().getValue()-1); } return start; } public static int monthWeekDateCount(int year,int month){ LocalDate start = DateUtil.monthWeekFastDate(year,month); LocalDate end = DateUtil.monthWeekLastDate(year,month); return Long.valueOf(end.toEpochDay()-start.toEpochDay()).intValue()+1; } public static List monthWeekDates(int year, int month){ String date = LocalDate.now().toString(); return monthWeekDates(year,month,date); } /** * 根據指定日期計算本週週一至週日的日期 * @param date * @return */ public static List weekDates(String date){ List<String> weekDates = new LinkedList<>(); String[] date2 = date.split("-"); int year2 = Integer.valueOf(date2[0]).intValue(); int month2 = Integer.valueOf(date2[1]).intValue(); int d2 = Integer.valueOf(date2[2]).intValue(); LocalDate start = LocalDate.of(year2,month2,d2); // System.out.print("日期:"+date+",周幾:"+start.getDayOfWeek().getValue()); if (start.getDayOfWeek().getValue() > 1) { //計算本週,週一的日期 start = start.minusDays(start.getDayOfWeek().getValue()).plusDays(1); // System.out.println(",日期:"+start+",周幾:"+start.getDayOfWeek().getValue()); } for(int a = 0;a< 7;a++){ weekDates.add(start.plusDays(a).toString()); } return weekDates; } /** * 根據指定日期計算本週往後計算指定週數的週一至週日的日期 * @param date * @return */ public static List weekDates(String date,int weekCount){ List<List<String>> weeks = new LinkedList(); List<String> weekDates = new LinkedList<>(); String[] date2 = date.split("-"); int year2 = Integer.valueOf(date2[0]).intValue(); int month2 = Integer.valueOf(date2[1]).intValue(); int d2 = Integer.valueOf(date2[2]).intValue(); LocalDate start = LocalDate.of(year2,month2,d2); // System.out.print("日期:"+date+",周幾:"+start.getDayOfWeek().getValue()); if (start.getDayOfWeek().getValue() > 1) { //計算本週,週一的日期 start = start.minusDays(start.getDayOfWeek().getValue()).plusDays(1); // System.out.println(",日期:"+start+",周幾:"+start.getDayOfWeek().getValue()); } for(int a = 0,alen = weekCount*7;a < alen;a++){ weekDates.add(start.plusDays(a).toString()); if(weekDates.size() == 7){ List<String> weekDates2 = new LinkedList<>(); weekDates2.addAll(weekDates); weeks.add(weekDates2); weekDates = new LinkedList<>(); } } return weeks; } /** * 返回指定年份月份的每週的週一到週日集合,超出下一週不在範圍,超出本月不在範圍 * @param year 年份 * @param month 月份 * @param date 日期 * @return */ public static List monthWeekDates(int year, int month,String date){ List<List<String>> weeks = new LinkedList(); List<String> weekDates = new LinkedList<>(); LocalDate start = null,end = null; if(StringUtils.isNotEmpty(date)){ String[] date2 = date.split("-"); int year2 = Integer.valueOf(date2[0]).intValue(); int month2 = Integer.valueOf(date2[1]).intValue(); int d2 = Integer.valueOf(date2[2]).intValue(); end = LocalDate.of(year2,month2,d2); if (end.getDayOfWeek().getValue() >= 1) { end = end.plusDays(7 - end.getDayOfWeek().getValue()+1); } if(end.getMonthValue() > month){ end = end.minusDays(7); } } // System.out.println("日期:"+date+",下個週一:"+end); for(int i = 0,ilen = monthWeekDateCount(year,month);i< ilen;i++) { start = DateUtil.monthWeekFastDate(year,month); start = start.plusDays(i); weekDates.add(start.toString()); if(weekDates.size() == 7){ List<String> weekDates2 = new LinkedList<>(); weekDates2.addAll(weekDates); weeks.add(weekDates2); weekDates = new LinkedList<>(); if(start.compareTo(end) >= 0){ break; } } } return weeks; } public static List<List<String>> desc2(List<List<String>> list){ List<List<String>> weeks = new ArrayList<>(); for(int a = list.size();a>0;a--){ weeks.add(list.get(a-1)); } return weeks; } /** * 返回 1-7 中的一天 * @return */ public static int getWeekNum() { LocalDate currentDate = LocalDate.now(); return getWeekNum(currentDate); } /** * 返回 1-7 中的一天 * @return */ public static int getWeekNum(String date) { return getWeekNum(LocalDate.parse(date,dtf_yyyyMMdd2)); } /** * 返回 1-7 中的一天 * @return */ public static int getWeekNum(LocalDate currentDate) { String[][] strArray = { {"MONDAY", "1"}, {"TUESDAY", "2"}, {"WEDNESDAY", "3"}, {"THURSDAY", "4"}, {"FRIDAY", "5"}, {"SATURDAY", "6"}, {"SUNDAY", "7"} }; String k = String.valueOf(currentDate.getDayOfWeek()); //獲取行數 for (int i = 0; i < strArray.length; i++) { if (k.equals(strArray[i][0])) { k = strArray[i][1]; break; } } return Integer.parseInt(k); } /** * 減天數 * @param day * @return */ public static String minusDays2(String date,int day) { return dtf_yyyyMMdd2.format(LocalDate.parse(date,dtf_yyyyMMdd2).minusDays(day)); } /** * 減天數 * @param day * @return */ public static String minusDays2(LocalDate date,int day) { return dtf_yyyyMMdd.format(date.minusDays(day)); } /** * 減天數 * @param day * @return */ public static String minusDays(int day){ return dtf_yyyyMMdd.format(LocalDateTime.now().minusDays(day)); } /** * 加天數 * @param day * @return */ public static String plusDays(int day){ return dtf_yyyyMMdd.format(LocalDateTime.now().plusDays(day)); } /** * 加天數 * @param date * @param day * @return */ public static String plusDays2(String date,int day){ return dtf_yyyyMMdd2.format(LocalDate.parse(date, dtf_yyyyMMdd2).plusDays(day)); } /** * 加月數 * @param month * @return */ public static String plusMonths(int month){ return dtf_yyyyMMdd.format(LocalDateTime.now().plusMonths(month)); } /** * 加月數 * @date 基礎時間 202004011820 * @month 加幾個月 * @return */ public static Long plusMonths(Long date,int month){ if(date < 200000000000L || date > 299999999999L){ return 0L; } return Long.valueOf(dtf_yyyyMMddHHmm.format(convert_dtfyyyyMMddHHmm(""+date).plusMonths(month))); } /** * 加小時 * @param hour * @return */ public static String plusHours(int hour){ return dtf.format(LocalDateTime.now().plusHours(hour)); } /** * 加小時 * @date 基礎時間 202004011820 * @month 加幾小時 * @return */ public static Long plusHours(Long date,int hour){ if(date < 200000000000L || date > 299999999999L){ return 0L; } return Long.valueOf(dtf.format(convert_dtfyyyyMMddHHmm(""+date).plusHours(hour))); } /** * 字符串轉指定格式日期 * @param date yyyy-MM-dd HH:mm:ss 格式的時間 * @return */ public static LocalDateTime convert_dtf(String date){ return LocalDateTime.parse(date,dtf); } /** * 字符串轉指定格式日期 * @param date yyyy-MM-dd HH:mm 格式的時間 * @return */ public static LocalDateTime convert_dtfyyyyMMddHHmm(String date){ return LocalDateTime.parse(date,dtf_yyyyMMddHHmm); } /** * 字符串轉指定格式日期 * @param date yyyy-MM-dd HH:mm:ss 格式的時間 * @return */ public static LocalDateTime convert_dtfyyyyMMddHHmmss(String date){ return LocalDateTime.parse(date,dtf_yyyyMMddHHmmss); } /** * 將日期轉換格式返回 yyyyMMddHHmm * @param date yyyy-MM-dd HH:mm:ss 格式的時間 * @return */ public static Long get_dtfyyyyMMddHHmm(String date){ return Long.valueOf( LocalDateTime.parse(date,dtf).format(dtf_yyyyMMddHHmm)); } /** * 獲取指定格式的當前日期 * @return */ public static Long get_yyyyMMddHHmmss(String date){ return Long.valueOf( LocalDateTime.parse(date,dtf).format(dtf_yyyyMMddHHmmss)); } /** * 獲取指定格式的當前日期 * @return */ public static Long get_yyyyMMddHHmmss(){ return Long.valueOf(dtf_yyyyMMddHHmmss.format(LocalDateTime.now())); } /** * 獲取指定格式的當前日期 * @return */ public static Long get_yyyyMMddHHmm(){ return Long.valueOf(dtf_yyyyMMddHHmm.format(LocalDateTime.now())); } /** * 日期格式化爲 * @param date yyyy-MM-dd HH:mm:ss * @return */ public static String format_dtf(LocalDateTime date){ return dtf_yyyyMMddHHmmss.format(date); } /** * 日期格式化爲 * @param timestamp * @return */ public static String format_dtf_long(Long timestamp){ Instant instant = Instant.ofEpochMilli(timestamp); ZoneId zone = ZoneId.systemDefault(); return dtf_yyyyMMddHHmmss.format(LocalDateTime.ofInstant(instant, zone)); } /** * 日期格式化爲 * @param timestamp * @return */ public static String format_dtf(Long timestamp){ Instant instant = Instant.ofEpochMilli(timestamp); ZoneId zone = ZoneId.systemDefault(); return dtf.format(LocalDateTime.ofInstant(instant, zone)); } /** * 日期格式化爲 * @param date yyyyMMddHHmm * @return */ public static String format_yyyyMMddHHmm(LocalDateTime date){ return dtf_yyyyMMddHHmm.format(date); } /** * 日期格式化爲 yyyyMMddHHmm * @param dateTime * @return */ public static Long format_yyyyMMddHHmm_long(LocalDateTime dateTime){ return Long.valueOf(format_yyyyMMddHHmm(dateTime)); } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章