获取日期得常用方法

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;
  }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值