package com.siact.common.utils; import com.siact.common.constant.Constant; import org.apache.commons.lang3.tuple.ImmutablePair; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * @author * @create */ public class DateUtils { /** * 获取指定年份月份的最后一天 * * @param yearMonth * @return */ public static Calendar getLastDayOfMonth(String yearMonth) { int year = Integer.parseInt(yearMonth.split("-")[0]); //年 int month = Integer.parseInt(yearMonth.split("-")[1]); //月 Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month); //设置当前月的上一个月 int lastDay = cal.getMinimum(Calendar.DATE); //获取月份中的最小值,即第一天 cal.set(Calendar.DAY_OF_MONTH, lastDay - 1); //上月的第一天减去1就是当月的最后一天 cal.set(Calendar.HOUR, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return cal; } /** * 获取指定年份月份的第一天 * * @param yearMonth * @return */ public static Calendar getFirstDayOfMonth(String yearMonth) { int year = Integer.parseInt(yearMonth.split("-")[0]); //年 int month = Integer.parseInt(yearMonth.split("-")[1]); //月 Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month - 1); //设置当前月的上一个月 cal.set(Calendar.DATE, 1); //上月的第一天减去1就是当月的最后一天 cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return cal; } /** * 获取指定年份月份的第一天 * * @param yearMonth * @return */ public static int getCountWeekS(String yearMonth) { int year = Integer.parseInt(yearMonth.split("-")[0]); //年 int month = Integer.parseInt(yearMonth.split("-")[1]); //月 Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month); c.setFirstDayOfWeek(Calendar.MONDAY); return c.getActualMaximum(Calendar.WEEK_OF_MONTH); } /** * 计算两个时间相隔天数 * * @param startDate 开始时间 * @param endDate 结束时间 * @return */ public static Long daysBetween(Date startDate, Date endDate) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); if (startDate == null || endDate == null) { return 0L; } startDate = sdf.parse(sdf.format(startDate)); endDate = sdf.parse(sdf.format(endDate)); Calendar cal = Calendar.getInstance(); cal.setTime(startDate); long time1 = cal.getTimeInMillis(); cal.setTime(endDate); long time2 = cal.getTimeInMillis(); long between_days = (time2 - time1) / (1000 * 3600 * 24); return Long.parseLong(String.valueOf(between_days)); } /** * 获取两个日期之间的年度月份 * * @param minDate * @param maxDate * @return */ public static List<String> getMonthBetween(String minDate, String maxDate) { ArrayList<String> result = new ArrayList<String>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月 Calendar min = Calendar.getInstance(); Calendar max = Calendar.getInstance(); try { min.setTime(sdf.parse(minDate)); min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1); max.setTime(sdf.parse(maxDate)); max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2); Calendar curr = min; while (curr.before(max)) { result.add(sdf.format(curr.getTime())); curr.add(Calendar.MONTH, 1); } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 获取两个日期之间的年度月份 * * @param startDate * @param endDate * @return */ public static List<String> getDays(String startDate, String endDate) { // 返回的日期集合 List<String> days = new ArrayList<String>(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date start = dateFormat.parse(startDate); Date end = dateFormat.parse(endDate); Calendar tempStart = Calendar.getInstance(); tempStart.setTime(start); Calendar tempEnd = Calendar.getInstance(); tempEnd.setTime(end); tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束) while (tempStart.before(tempEnd)) { days.add(dateFormat.format(tempStart.getTime())); tempStart.add(Calendar.DAY_OF_YEAR, 1); } } catch (ParseException e) { e.printStackTrace(); } return days; } /** * 计算两个日期字符串之间的天数 * * @param minDate * @param maxDate * @return */ public static long betweenDays(String minDate, String maxDate) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化为年月 try { Date start = sdf.parse(minDate); Date end = sdf.parse(maxDate); long betweenDays = (end.getTime() - start.getTime()) / (1000L * 3600L * 24L); return betweenDays + 1; } catch (Exception e) { e.printStackTrace(); } return 0L; } /** * 查询指定日期前后指定的天数 * * @param date 日期对象 * @param days 天数 * @return 日期对象 */ public static Date incr(Date date, int days) { if (date == null) { return null; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, days); return calendar.getTime(); } /** * 获取今天零点时间 * @return */ public static String getTodayWholeTime() { LocalDateTime startTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); return Constant.DATE_TIME_FORMATTER.format(startTime); } /** * 获取现在时间前一分钟 * @return */ public static String getCurrWholeTime() { String now = LocalDateTime.now().plusMinutes(-1).format(Constant.DATE_TIME_FORMATTER); int indexOf = now.lastIndexOf(":"); String formatNow = now.substring(0, indexOf) + ":00"; return formatNow; } /** * 获取月初整点时间 00:00:00 * @return */ public static String getCurrMouthStartTime(LocalDateTime time) { LocalDateTime mouthStartTime = LocalDateTime.of(LocalDate.from(time.with(TemporalAdjusters.firstDayOfMonth())), LocalTime.MIN); return mouthStartTime.format(Constant.DATE_TIME_FORMATTER); } /** * 获取月末最大时间 23:59:59 * @return */ public static String getCurrMouthEndTime(LocalDateTime time) { LocalDateTime mouthEndTime = LocalDateTime.of(LocalDate.from(time.with(TemporalAdjusters.lastDayOfMonth())), LocalTime.MAX); return mouthEndTime.format(Constant.DATE_TIME_FORMATTER); } /** * 根据月份获取当前月初与月末值 * 其他月返回1号到31号,本月返回1号到现在值 * * @param time 月份时间 * @return */ public static ImmutablePair<String, String> getMouthStartOfEndByMouth(String time) { String jugTime = time + "-01"; LocalDate localDate = LocalDate.parse(jugTime, Constant.DATE_FORMATTER); LocalDate now = LocalDate.now(); String startTime = ""; String endTime = ""; if (now.getMonth().getValue() == localDate.getMonth().getValue()) { startTime = getCurrMouthStartTime(LocalDateTime.now()); endTime = getCurrWholeTime(); } else { startTime = getCurrMouthStartTime(LocalDateTime.of(localDate, LocalTime.of(0,0,0))); endTime = getCurrMouthStartTime(LocalDateTime.of(localDate.plusMonths(1), LocalTime.of(0,0,0))); } return ImmutablePair.of(startTime, endTime); } /** * 返回本月1号到下月1号整点 * * @param time 月份 * @return */ public static ImmutablePair<String, String> getMouthStartOfEnd(String time) { DateTimeFormatter df = DateTimeFormatter.ofPattern(Constant.DATE); String jugTime = time + "-01"; LocalDate localDate = LocalDate.parse(jugTime, df); String startTime = getCurrMouthStartTime(LocalDateTime.of(localDate, LocalTime.of(0,0,0))); String endTime = getCurrMouthStartTime(LocalDateTime.of(localDate.plusMonths(1), LocalTime.of(0,0,0))); return ImmutablePair.of(startTime, endTime); } /** * 判断月份是否大于本月 * * @param time * @return */ public static boolean judgeTheMouth(String time) { String jugTime = time + "-01"; LocalDate jugDate = LocalDate.parse(jugTime, Constant.DATE_FORMATTER); LocalDate now = LocalDate.now(); return jugDate.isAfter(now)&&!jugDate.isEqual(now)? true : false; } }
获取日期得常用方法
最新推荐文章于 2024-04-05 02:56:29 发布