日期处理工具类

这个Java类库提供了一系列日期处理方法,包括获取当前日期、格式化日期、计算两个日期之间的差值、获取某月最后一天等。还支持过去日期的获取、小时范围内的日期数组生成以及日期与时间的解析。对于开发中涉及日期操作的场景非常实用。
摘要由CSDN通过智能技术生成

日期处理工具类

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class DateTimeUtil {

  /**
   * 缺省的日期显示格式: yyyy-MM-dd
   */
  public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

  /**
   * 缺省的日期时间显示格式:yyyy-MM-dd HH:mm:ss
   */
  public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
  /**
   * 缺省的日期时间显示格式:yyyy-MM
   */
  public static SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM");
  /**
   * 私有构造方法,禁止对该类进行实例化
   */
  private DateTimeUtil() {}

  /**
   * 得到系统当前日期时间
   * @return 当前日期时间
   */
  public static Date getNow() {
    return Calendar.getInstance().getTime();
  }

  /**
   * 得到用缺省方式格式化的当前日期
   * @return 当前日期
   */
  public static String getDate() {
    return getDateTime(DEFAULT_DATE_FORMAT);
  }

  /**
   * 得到用缺省方式格式化的当前日期及时间
   * @return 当前日期及时间
   */
  public static String getDateTime() {
    return getDateTime(DEFAULT_DATETIME_FORMAT);
  }

  /**
   * 得到用缺省方式格式化的当前日期及时间
   * @return 当前日期及时间
   */
  public static String getDateTimeToMonth() {
    return formatter3.format(Calendar.getInstance().getTime());
  }


  /**
   * 得到系统当前日期及时间,并用指定的方式格式化
   * @param pattern 显示格式
   * @return 当前日期及时间
   */
  public static String getDateTime(String pattern) {
    Date datetime = Calendar.getInstance().getTime();
    return getDateTime(datetime, pattern);
  }

  /**
   * 得到用指定方式格式化的日期
   * @param date 需要进行格式化的日期
   * @param pattern 显示格式
   * @return 日期时间字符串
   */
  public static String getDateTime(Date date, String pattern) {
    if (null == pattern || "".equals(pattern)) {
      pattern = DEFAULT_DATETIME_FORMAT;
    }
    SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
    return dateFormat.format(date);
  }

  /**
   * 获取当前时间,仅返回时分
   * @return 日期时间字符串
   */
  public static String getLocalHourAndMin(Date date)
  {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    return dateFormat.format(date);
  }

  /**
   * 得到当前年份
   * @return 当前年份
   */
  public static int getCurrentYear() {
    return Calendar.getInstance().get(Calendar.YEAR);
  }

  /**
   * 得到当前月份
   * @return 当前月份
   */
  public static int getCurrentMonth() {
    //用get得到的月份数比实际的小1,需要加上
    return Calendar.getInstance().get(Calendar.MONTH) + 1;
  }

  /**
   * 得到当前日
   * @return 当前日
   */
  public static int getCurrentDay() {
    return Calendar.getInstance().get(Calendar.DATE);
  }

  /**
   * 取得当前日期以后若干天的日期。如果要得到以前的日期,参数用负数。
   * 例如要得到上星期同一天的日期,参数则为-7
   * @param days 增加的日期数
   * @return 增加以后的日期
   */
  public static Date addDays(int days) {
    return add(getNow(), days, Calendar.DATE);
  }

  /**
   * 取得指定日期以后若干天的日期。如果要得到以前的日期,参数用负数。
   * @param date 基准日期
   * @param days 增加的日期数
   * @return 增加以后的日期
   */
  public static Date addDays(Date date, int days) {
    return add(date, days, Calendar.DATE);
  }

  /**
   * 取得当前日期以后某月的日期。如果要得到以前月份的日期,参数用负数。
   * @param months 增加的月份数
   * @return 增加以后的日期
   */
  public static Date addMonths(int months) {
    return add(getNow(), months, Calendar.MONTH);
  }

  /**
   * 取得指定日期以后某月的日期。如果要得到以前月份的日期,参数用负数。
   * 注意,可能不是同一日子,例如2003-1-31加上一个月是2003-2-28
   * @param date 基准日期
   * @param months 增加的月份数

   * @return 增加以后的日期
   */
  public static Date addMonths(Date date, int months) {
    return add(date, months, Calendar.MONTH);
  }

  /**
   * 内部方法。为指定日期增加相应的天数或月数
   * @param date 基准日期
   * @param amount 增加的数量
   * @param field 增加的单位,年,月或者日
   * @return 增加以后的日期
   */
  public static Date add(Date date, int amount, int field) {
    Calendar calendar = Calendar.getInstance();

    calendar.setTime(date);
    calendar.add(field, amount);

    return calendar.getTime();
  }

  /**
   * 计算两个日期相差天数。
   * 用第一个日期减去第二个。如果前一个日期小于后一个日期,则返回负数
   * @param one 第一个日期数,作为基准
   * @param two 第二个日期数,作为比较
   * @return 两个日期相差天数
   */
  public static long diffDays(Date one, Date two) {
    return (one.getTime() - two.getTime()) / (24 * 60 * 60 * 1000);
  }

  /**
   * 计算两个日期相差月份数
   * 如果前一个日期小于后一个日期,则返回负数
   * @param one 第一个日期数,作为基准
   * @param two 第二个日期数,作为比较
   * @return 两个日期相差月份数
   */
  public static int diffMonths(Date one, Date two) {

    Calendar calendar = Calendar.getInstance();

    //得到第一个日期的年分和月份数
    calendar.setTime(one);
    int yearOne = calendar.get(Calendar.YEAR);
    int monthOne = calendar.get(Calendar.MONDAY);

    //得到第二个日期的年份和月份
    calendar.setTime(two);
    int yearTwo = calendar.get(Calendar.YEAR);
    int monthTwo = calendar.get(Calendar.MONDAY);

    return (yearOne - yearTwo) * 12 + (monthOne - monthTwo);
  }

  /**
   * 将一个字符串用给定的格式转换为日期类型。<br>
   * 注意:如果返回null,则表示解析失败
   * @param datestr 需要解析的日期字符串
   * @param pattern 日期字符串的格式,默认为“yyyy-MM-dd”的形式
   * @return 解析后的日期
   */
  public static Date parse(String datestr, String pattern) {
    Date date = null;

    if (null == pattern || "".equals(pattern)) {
      pattern = DEFAULT_DATE_FORMAT;
    }

    try {
      SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
      date = dateFormat.parse(datestr);
    }
    catch (ParseException e) {
      //
    }

    return date;
  }

  /**
   * 返回本月的最后一天
   * @return 本月最后一天的日期
   */
  public static Date getMonthLastDay() {
    return getMonthLastDay(getNow());
  }

  /**
   * 返回给定日期中的月份中的最后一天
   * @param date 基准日期
   * @return 该月最后一天的日期
   */
  public static Date getMonthLastDay(Date date) {

    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);

    //将日期设置为下一月第一天
    calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, 1);

    //减去1天,得到的即本月的最后一天
    calendar.add(Calendar.DATE, -1);

    return calendar.getTime();
  }

  /**
   * 获取过去第几天的日期
   *
   * @param past
   * @return
   */
  public static String getPastDate(int past,Date date,String pattern) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - past);
    Date today = calendar.getTime();
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    String result = sdf.format(today);
    return result;
  }
  /**
   * 获取过去7天内的日期数组
   * @return  日期数组
   */
  public static ArrayList<String> pastDay(String time, String pattern){
    ArrayList<String> pastDaysList = new ArrayList<>();
    try {
      //我这里传来的时间是个string类型的,所以要先转为date类型的。
      SimpleDateFormat sdf= new SimpleDateFormat(pattern);
      Date date = sdf.parse(time);
      for (int i = 6; i >= 0; i--) {
        pastDaysList.add(getPastDate(i,date,pattern));
      }
    }catch (ParseException e){
      e.printStackTrace();
    }
    return pastDaysList;
  }
  /**
   * 获取某段时间内的所有小时
   * @return  日期数组
   */
  public static List<String> findDateHours(String dBegin, String dEnd) {
    Date begin=parse(dBegin,DEFAULT_DATE_FORMAT);
    Date end=new Date(parse(dEnd,DEFAULT_DATE_FORMAT).getTime()+24*60*60*1000); //要包含结束时间 所以加一天
    List lDate = new ArrayList();
    Calendar calBegin = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
    calBegin.setTime(begin);
    Calendar calEnd = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
    calEnd.setTime(end);
// 测试此日期是否在指定日期之后
    while (end.after(calBegin.getTime())) {
      if (calBegin.getTime().after(new Date())){
        break;
      }
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
      lDate.add(getDateTime(calBegin.getTime(),"YYYY-MM-dd HH"));
      calBegin.add(Calendar.HOUR, 1);
    }
    return lDate;
  }
  /*
  *获取到两个日期之间相差多少个小时
  * 格式 yyyy-MM-dd HH:mm:ss
  */
  public static long getDiffHours(String begin,String end){
    Date dbegin=parse(begin,DEFAULT_DATETIME_FORMAT);
    Date dend=parse(end,DEFAULT_DATETIME_FORMAT);
    return (dend.getTime()-dbegin.getTime())/(60*60*1000);
  }

  /*
   *获取到两个月之间相差多少个天
   * 格式:yyyy-MM-dd
   */
  public static long getDiffDays(String begin,String end){
    Date dbegin=parse(begin,DEFAULT_DATE_FORMAT);
    Date dend=parse(end,DEFAULT_DATE_FORMAT);
    return (dend.getTime()-dbegin.getTime())/(24*60*60*1000);
  }
  /**
   * 获取某月的最后一天
   *
   */
  public static String getLastDayOfMonth(int year,int month)
  {
    Calendar cal = Calendar.getInstance();
    //设置年份
    cal.set(Calendar.YEAR,year);
    //设置月份
    cal.set(Calendar.MONTH, month-1);
    //获取某月最大天数
    int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    //设置日历中月份的最大天数
    cal.set(Calendar.DAY_OF_MONTH, lastDay);
    //格式化日期
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String lastDayOfMonth = sdf.format(cal.getTime());
    return lastDayOfMonth;
  }


  public static void main(String[] args) {
    String dBegin="2020-12-17";
    String dEnd="2020-12-24";
    System.out.println(getDiffDays(dBegin,dEnd));
  }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值