0
点赞
收藏
分享

微信扫一扫

日期操作工具:DateUtil

西曲风 2022-02-21 阅读 82
java

package com.ymob.protal.util;

import com.ymob.utils.DateUtils;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;

/**

  • 日期操作工具
    */
    public class DateUtil {
    public static final String C_DATE_DIVISION = “-”;
    public static final String C_TIME_PATTON_DEFAULT = “yyyy-MM-dd HH:mm:ss”;

    public static final String C_TIME_PATTON_NO_SECOND = “yyyy-MM-dd HH:mm”;
    public static final String C_DATE_PATTON_DEFAULT = “yyyy-MM-dd”;
    public static final String C_DATA_PATTON_YYYYMMDD = “yyyyMMdd”;
    public static final String C_TIME_PATTON_HHMMSS = “HH:mm:ss”;

    public static final int C_ONE_SECOND = 1000;
    public static final int C_ONE_MINUTE = 60 * C_ONE_SECOND;
    public static final int C_ONE_HOUR = 60 * C_ONE_MINUTE;
    public static final long C_ONE_DAY = 24 * C_ONE_HOUR;

    /**

    • Return the current date

    • @return - DATE

      */
      public static Date getCurrentDate() {
      Calendar cal = Calendar.getInstance();
      Date currDate = cal.getTime();

      return currDate;
      }

    /**

    • Return the current date string

    • @return - 产生的日期字符串

      */
      public static String getCurrentDateStr() {
      Calendar cal = Calendar.getInstance();
      Date currDate = cal.getTime();

      return format(currDate);
      }

    /**

    • 获取当前月份的上个月
      */
      public static String getLastMonth() {
      LocalDate today = LocalDate.now();
      today = today.minusMonths(1);
      DateTimeFormatter formatters = DateTimeFormatter.ofPattern(“yyyy-MM”);
      return formatters.format(today);
      }

    /**

    • Return the current datetime string

    • @return - 产生的日期字符串

      */
      public static String getCurrentDateTimeStr() {
      Calendar cal = Calendar.getInstance();
      Date currDate = cal.getTime();

      return format(currDate, C_TIME_PATTON_DEFAULT);
      }

    /**

    • Return the current date in the specified format

    • @param strFormat

    • @return
      */
      public static String getCurrentDateStr(String strFormat) {
      Calendar cal = Calendar.getInstance();
      Date currDate = cal.getTime();

      return format(currDate, strFormat);
      }

    /**

    • Parse a string and return a date value
    • @param dateValue
    • @return
    • @throws Exception
      */
      public static Date parseDate(String dateValue) {
      return parseDate(C_DATE_PATTON_DEFAULT, dateValue);
      }

    /**

    • Parse a strign and return a datetime value
    • @param dateValue
    • @return
      */
      public static Date parseDateTime(String dateValue) {
      return parseDate(C_TIME_PATTON_DEFAULT, dateValue);
      }

    /**

    • Parse a string and return the date value in the specified format

    • @param strFormat

    • @param dateValue

    • @return

    • @throws ParseException

    • @throws Exception
      */
      public static Date parseDate(String strFormat, String dateValue) {
      if (dateValue == null)
      return null;

      if (strFormat == null)
      strFormat = C_TIME_PATTON_DEFAULT;

      SimpleDateFormat dateFormat = new SimpleDateFormat(strFormat);
      Date newDate = null;

      try {
      newDate = dateFormat.parse(dateValue);
      } catch (ParseException pe) {
      newDate = null;
      }
      return newDate;
      }

    /**

    • 将Timestamp类型的日期转换为系统参数定义的格式的字符串。
    • @param aTs_Datetime 需要转换的日期。
    • @return 转换后符合给定格式的日期字符串
      */
      public static String format(Date aTs_Datetime) {
      return format(aTs_Datetime, C_DATE_PATTON_DEFAULT);
      }

    /**

    • 将Timestamp类型的日期转换为系统参数定义的格式的字符串。
    • @param aTs_Datetime 需要转换的日期。
    • @return 转换后符合给定格式的日期字符串
      */
      public static String formatTime(Date aTs_Datetime) {
      return format(aTs_Datetime, C_TIME_PATTON_DEFAULT);
      }

    /**

    • 将Date类型的日期转换为系统参数定义的格式的字符串。

    • @param aTs_Datetime

    • @param as_Pattern

    • @return
      */
      public static String format(Date aTs_Datetime, String as_Pattern) {
      if (aTs_Datetime == null || as_Pattern == null)
      return null;
      SimpleDateFormat dateFromat = new SimpleDateFormat();
      dateFromat.applyPattern(as_Pattern);

      return dateFromat.format(aTs_Datetime);
      }

    /**

    • @param aTs_Datetime

    • @param as_Format

    • @return
      */
      public static String formatTime(Date aTs_Datetime, String as_Format) {
      if (aTs_Datetime == null || as_Format == null)
      return null;
      SimpleDateFormat dateFromat = new SimpleDateFormat();
      dateFromat.applyPattern(as_Format);

      return dateFromat.format(aTs_Datetime);
      }

    /**

    • 将字符串按照 as_Format 的格式转化成日期
    • @param s_date
    • @param as_Format
    • @return
      */
      public static Date formatToDate(String s_date, String as_Format) {
      SimpleDateFormat sdf = new SimpleDateFormat(as_Format);
      try {
      return sdf.parse(s_date);
      } catch (ParseException e) {
      e.printStackTrace();
      return null;
      }
      }

    public static String getFormatTime(Date dateTime) {
    return formatTime(dateTime, C_TIME_PATTON_HHMMSS);
    }

    /**

    • @param aTs_Datetime

    • @param as_Pattern

    • @return
      */
      public static String format(Timestamp aTs_Datetime, String as_Pattern) {
      if (aTs_Datetime == null || as_Pattern == null)
      return null;
      SimpleDateFormat dateFromat = new SimpleDateFormat();
      dateFromat.applyPattern(as_Pattern);

      return dateFromat.format(aTs_Datetime);
      }

    /**

    • 取得指定日期N天后的日期

    • @param date

    • @param days

    • @return
      */
      public static Date addDays(Date date, int days) {
      Calendar cal = Calendar.getInstance();
      cal.setTime(date);

      cal.add(Calendar.DAY_OF_MONTH, days);

      return cal.getTime();
      }

    /**

    • 取得N分钟后的时间

    • @param date

    • @param minute

    • @return
      */
      public static Date addMinutes(Date date, int minute) {
      Calendar cal = Calendar.getInstance();
      cal.setTime(date);

      cal.add(Calendar.MINUTE, minute);

      return cal.getTime();
      }

    /**

    • 计算两个日期之间相差的天数

    • @param date1

    • @param date2

    • @return
      */
      public static int daysBetween(Date date1, Date date2) {
      Calendar cal = Calendar.getInstance();
      cal.setTime(date1);
      long time1 = cal.getTimeInMillis();
      cal.setTime(date2);
      long time2 = cal.getTimeInMillis();
      long between_days = (time2 - time1) / (1000 * 3600 * 24);

      return Integer.parseInt(String.valueOf(between_days));
      }

    /**

    • 计算当前日期相对于"1977-12-01"的天数

    • @param date

    • @return
      */
      public static long getRelativeDays(Date date) {
      Date relativeDate = DateUtil.parseDate(“yyyy-MM-dd”, “1977-12-01”);

      return DateUtil.daysBetween(relativeDate, date);
      }

    public static Date getDateBeforTwelveMonth() {
    String date = “”;
    Calendar cla = Calendar.getInstance();
    cla.setTime(getCurrentDate());
    int year = cla.get(Calendar.YEAR) - 1;
    int month = cla.get(Calendar.MONTH) + 1;
    if (month > 9) {
    date = String.valueOf(year) + C_DATE_DIVISION
    + String.valueOf(month) + C_DATE_DIVISION + “01”;
    } else {
    date = String.valueOf(year) + C_DATE_DIVISION + “0”
    + String.valueOf(month) + C_DATE_DIVISION + “01”;
    }

     Date dateBefore = parseDate(date);
    return dateBefore;

    }

    /**

    • 传入时间字符串,加一天后返回Date

    • @param date 时间 格式 YYYY-MM-DD

    • @return
      */
      public static Date addDate(String date) {
      if (date == null) {
      return null;
      }
      Date tempDate = parseDate(C_DATE_PATTON_DEFAULT, date);
      String year = format(tempDate, “yyyy”);
      String month = format(tempDate, “MM”);
      String day = format(tempDate, “dd”);

      GregorianCalendar calendar = new GregorianCalendar(
      Integer.parseInt(year), Integer.parseInt(month) - 1,
      Integer.parseInt(day));

      calendar.add(GregorianCalendar.DATE, 1);
      return calendar.getTime();
      }

    public static Long dateDDMMSSStringToLong(String str) throws ParseException {
    SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
    Calendar cal = Calendar.getInstance();
    cal.setTime(format.parse(str));
    return cal.getTimeInMillis();
    }

    /**

    • 前推天数
      */
      public static Date parseDay(int day) {
      int INTERVAL_DAY = -day;
      Calendar calender = Calendar.getInstance();
      calender.setTime(new Date());
      calender.add(Calendar.DATE, INTERVAL_DAY);
      return calender.getTime();
      }

    public static Date getDay(Date date, int n) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.DAY_OF_MONTH, n);
    date = calendar.getTime();
    return date;
    }

    /**

    • 得到当天的开始时间,格式为yyyy-mm-dd HH:MM:ss, 其中时分秒都为0

    • @return
      */
      public static String getCurrentDayBeginDateTimeStr() {
      String dateStr = “”;
      Calendar cal = Calendar.getInstance();
      cal.setTimeInMillis(System.currentTimeMillis());

      cal.set(Calendar.HOUR_OF_DAY, 0);
      cal.set(Calendar.MINUTE, 0);
      cal.set(Calendar.SECOND, 0);

      dateStr = DateUtil.format(cal.getTime(), DateUtil.C_TIME_PATTON_DEFAULT);

      return dateStr;
      }

    /**

    • 得到上一天的开始时间,格式为yyyy-mm-dd HH:MM:ss, 其中时分秒都为0

    • @return
      */
      public static String getPreviousDayBeginDateTimeStr() {
      String dateStr = “”;
      Calendar cal = Calendar.getInstance();
      cal.setTimeInMillis(System.currentTimeMillis());

      cal.add(Calendar.DAY_OF_MONTH, -1);
      cal.set(Calendar.HOUR_OF_DAY, 0);
      cal.set(Calendar.MINUTE, 0);
      cal.set(Calendar.SECOND, 0);

      dateStr = DateUtil.format(cal.getTime(), DateUtil.C_TIME_PATTON_DEFAULT);

      return dateStr;
      }

    public static String addDay(int n) {
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(System.currentTimeMillis());
    cal.add(Calendar.DAY_OF_MONTH, n);
    return DateUtil.format(cal.getTime(), DateUtil.C_DATE_PATTON_DEFAULT);
    }

    /**

    • 得到当前时间下一分钟:45秒的时间,比如2014-06-26 11:03:45

    • @return
      */
      public static String getNextMin45Str() {
      String dateStr = “”;
      Calendar cal = Calendar.getInstance();
      cal.setTimeInMillis(System.currentTimeMillis());

      cal.add(Calendar.MINUTE, 1);
      cal.set(Calendar.SECOND, 0);
      cal.add(Calendar.SECOND, 45);

      dateStr = DateUtil.format(cal.getTime(), DateUtil.C_TIME_PATTON_DEFAULT);

      return dateStr;
      }

    /**

    • 得到当前时间下一分钟:45秒的时间,比如2014-06-26 11:03:45

    • @return
      */
      public static String getNextMin30Str() {
      String dateStr = “”;
      Calendar cal = Calendar.getInstance();
      cal.setTimeInMillis(System.currentTimeMillis());

      cal.add(Calendar.MINUTE, 1);
      cal.set(Calendar.SECOND, 0);
      cal.add(Calendar.SECOND, 30);

      dateStr = DateUtil.format(cal.getTime(), DateUtil.C_TIME_PATTON_DEFAULT);

      return dateStr;
      }

    /**

    • 得到上一个时辰的开始时间,格式为yyyy-mm-dd HH:MM:ss,

    • @return
      */
      public static String getPreviousHourBeginDateTimeStr() {
      String dateTimeStr = “”;
      Calendar cal = Calendar.getInstance();
      cal.setTimeInMillis(System.currentTimeMillis());

      cal.add(Calendar.HOUR_OF_DAY, -1);
      cal.set(Calendar.MINUTE, 0);
      cal.set(Calendar.SECOND, 0);

      dateTimeStr = DateUtil.format(cal.getTime(), DateUtil.C_TIME_PATTON_DEFAULT);

      return dateTimeStr;
      }

    /**

    • 得到下一天的开始时间,格式为yyyy-mm-dd HH:MM:ss, 其中时分秒都为0

    • @return
      */
      public static String getNextDayBeginDateTimeStr() {
      String dateStr = “”;
      Calendar cal = Calendar.getInstance();
      cal.setTimeInMillis(System.currentTimeMillis());

      cal.add(Calendar.DAY_OF_MONTH, 1);
      cal.set(Calendar.HOUR_OF_DAY, 0);
      cal.set(Calendar.MINUTE, 0);
      cal.set(Calendar.SECOND, 0);

      dateStr = DateUtil.format(cal.getTime(), DateUtil.C_TIME_PATTON_DEFAULT);

      return dateStr;
      }

    /**

    • 得到下一个时辰的开始时间,格式为yyyy-mm-dd HH:MM:ss,

    • @return
      */
      public static String getNextHourBeginDateTimeStr() {
      String dateTimeStr = “”;
      Calendar cal = Calendar.getInstance();
      cal.setTimeInMillis(System.currentTimeMillis());

      cal.add(Calendar.HOUR_OF_DAY, 1);
      cal.set(Calendar.MINUTE, 0);
      cal.set(Calendar.SECOND, 0);

      dateTimeStr = DateUtil.format(cal.getTime(), DateUtil.C_TIME_PATTON_DEFAULT);

      return dateTimeStr;
      }

    /**

    • 得到当前时辰的开始时间,格式为yyyy-mm-dd HH:MM:ss,

    • @return
      */
      public static String getCurrentHourBeginDateTimeStr() {
      String dateTimeStr = “”;
      Calendar cal = Calendar.getInstance();
      cal.setTimeInMillis(System.currentTimeMillis());

      cal.set(Calendar.MINUTE, 0);
      cal.set(Calendar.SECOND, 0);

      dateTimeStr = DateUtil.format(cal.getTime(), DateUtil.C_TIME_PATTON_DEFAULT);

      return dateTimeStr;
      }

    public static long getSecondsNextEarlyMorning() {
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_YEAR, 1);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return (calendar.getTimeInMillis() - System.currentTimeMillis()) / 1000;
    }

    /**

    • 获取精确到秒的时间戳
    • @param date
    • @return
      */
      public static String getSecondTimestampTwo(Date date) {
      if (null == date) {
      return “0”;
      }
      String timestamp = String.valueOf(date.getTime() / 1000);
      return timestamp;
      }

    /**

    • 计算当前时间距离n天后的秒数
    • @param n
    • @return
    • @throws ParseException
      */
      public static long times(int n) {
      long now = System.currentTimeMillis();
      SimpleDateFormat sdfOne = new SimpleDateFormat(C_DATE_PATTON_DEFAULT);
      try {
      long overTime = (now - (sdfOne.parse(sdfOne.format(now)).getTime())) / 1000;
      //当前时间 距离当天晚上23:59:59 秒数 也就是今天还剩多少秒
      long TimeNext = n * 24 * 60 * 60 - overTime;
      return TimeNext;
      } catch (ParseException e) {
      e.printStackTrace();
      }
      return 0l;
      }

    /**

    • 计算两个日期的天数
      */
      public static int getBetweenDays(LocalDate localDate1, LocalDate localDate2) {
      // Period next = Period.between(localDate1, localDate2);
      return (int) (localDate2.toEpochDay() - localDate1.toEpochDay());
      }

    /**

    • 两个日期直接的dataStr
      */
      public static List getBetweenDateStr(String dateStart, String dateEnd) {
      List lable = new ArrayList<>();
      while (!Objects.equals(dateEnd, dateStart)) {
      lable.add(dateEnd);
      dateEnd = DateUtils.getLastDate(dateEnd, -1);
      }
      lable.add(dateStart);
      Collections.reverse(lable);
      return lable;
      }

    public static String getMonthFirstDay() {
    SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);
    //获取当前月第一天:
    Calendar c = Calendar.getInstance();
    c.add(Calendar.MONTH, -1);
    //设置为1号,当前日期既为本月第一天
    c.set(Calendar.DAY_OF_MONTH, 1);
    return format.format(c.getTime());
    }

    public static String getMonthLastDay() {
    SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);
    //获取当前月最后一天
    Calendar ca = Calendar.getInstance();
    ca.add(Calendar.MONTH, -1);
    ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
    return format.format(ca.getTime());
    }
    }

举报

相关推荐

0 条评论