硬核!万人围观,Java时间工具类,无法拒绝

简介: 硬核!万人围观,Java时间工具类,无法拒绝

第一种: 日历工具类

package com.baidu.base.util;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
 *
 * @Title: CalendarUtil
 * @Description: 日历工具类
 */
public class CalendarUtil {
    /**
     * 
     * @Description 获得指定日期工作周的指定星期几的日期
     * @Title getDateByWeekToDate
     * @param date
     * @param week
     * @return
     */
    public static Date getDateByWeekToDate(Date date, int week) {
        if (week <= 0) {
            return date;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_WEEK, week);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        return calendar.getTime();
    }
    /**
     * @Description 得到按当前日期往前推一个月格式化时间格式为 00:00:00
     * @Title getUpperMonthTheToDay
     * @param date
     * @return
     */
    public static Date getUpperMonthTheToDayHHMMSS(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.MONTH, -1);
        c.add(Calendar.DAY_OF_MONTH, 1);
        c.set(Calendar.HOUR_OF_DAY, 00);
        c.set(Calendar.MINUTE, 00);
        c.set(Calendar.SECOND, 00);
        return c.getTime();
    }
    /**
     * 
     * @Description 获得指定日期的最初时间 最初时间为00:00:00
     * @Title getDayBegin
     * @param date
     * @return
     */
    public static Date getDayBegin(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        return calendar.getTime();
    }
    /**
     * @Description 获得指定日期的最终时间 最终时间为23:59:59
     * @Title getDayEnd
     * @param date
     * @return
     */
    public static Date getDayEnd(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        return calendar.getTime();
    }
    /**
     * 
     * @Description 得到指定日期的天数范围, day可以为正/负数,正数为向后推day天,负数为向前推day天,不含当天
     * @Title getDateByDayToDate
     * @param date
     * @param day
     * @return
     */
    public static Date getDateByDayToDate(Date date, int day) {
        if (day == 0) {
            return date;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, day);
        return calendar.getTime();
    }
    /**
     *
     * @Description 获得本周的第一天,周一
     * @Title getWeekDayStartTime
     * @param date
     * @return
     */
    public static Date getWeekDayStartTime(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//设置周一
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
//        c.setFirstDayOfWeek(Calendar.MONDAY);
        return c.getTime();
    }
    /**
     * @Description 获得本周的最后一天,周日
     * @Title getWeekDayEndTime
     * @param date
     * @return
     */
    public static Date getWeekDayEndTime(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.setFirstDayOfWeek(Calendar.MONDAY);
        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        return c.getTime();
    }
    /**
     * @Description 得到指定年月的第一天
     * @Title getStartDayByYearMonth
     * @param year
     * @param month
     * @return
     */
    public static Date getBeginDayByYearMonth(int year, int month) {
      Calendar c = Calendar.getInstance();
      c.clear();
      c.set(year, month-1, 1);
      return getDayBegin(c.getTime());
    }
    /**
     * @Description 得到指定年月的最后一天
     * @Title getEndDayByYearMonth
     * @param year
     * @param month
     * @return
     */
    public static Date getEndDayByYearMonth(int year, int month) {
      Calendar c = Calendar.getInstance();
      c.clear();
      c.set(year, month-1, 1);
      int endDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
      c.set(Calendar.DAY_OF_MONTH, endDay);
      return getDayEnd(c.getTime());
    }
    /**
     * @Description 得到按当前日期往前推一个月
     * @Title getUpperMonthTheToDay
     * @param date
     * @return
     */
    public static Date getUpperMonthTheToDay(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.MONTH, -1);
        c.add(Calendar.DAY_OF_MONTH, 1);
        return c.getTime();
    }
    /**
     * 
     * @Description 得到一年的第一天
     * @Title getStartYear
     * @param year
     * @return
     */
    public static Date getBeginYear(int year) {
      Calendar c = Calendar.getInstance();
      c.set(year, 0, 1, 0, 0, 0);
      return c.getTime();
    }
    /**
     * @Description 得到一年的最后一天
     * @Title getEndYear
     * @param year
     * @return
     */
    public static Date getEndYear(int year) {
      Date date = getBeginYear(year);
      Calendar c = Calendar.getInstance();
      c.setTime(date);
      c.add(Calendar.YEAR, 1);
      c.set(Calendar.SECOND, -1);
      return c.getTime();
    }
    /**
     * @Description 得到当前时间的年份
     * @Title getYear
     * @param date
     * @return
     */
    public static int getYear(Date date) {
      Calendar c = Calendar.getInstance();
      c.setTime(date);
      return c.get(Calendar.YEAR);
    }
    /**
     * @Description 得到当前时间的月份
     * @Title getMonth
     * @param date
     * @return
     */
    public static int getMonth(Date date) {
      Calendar c = Calendar.getInstance();
      c.setTime(date);
      return c.get(Calendar.MONTH) + 1;
    }
    /**
     * 
     * @Description 得到date的差别日期  
     * @Title getDifferenceDay
     * @param date 日期
     * @param day 差别天数,可以为正,可以为-
     * @return
     */
    public static Date getDifferenceDay(Date date, int day) {
      Calendar c = Calendar.getInstance();
      c.setTime(date);
      c.add(Calendar.DAY_OF_MONTH, day);
      return c.getTime();
    }
    public static void main(String[] arge) throws Exception {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Date date = getDifferenceDay(new Date(), -1);
      System.out.println(sdf.format(date));
    }
}

第二种:日期处理类

package com.baidu.base.util;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
 *
 * @Title: DateUtil
 * @Description: 日期处理w
 */
public class DateUtil {
  private final static SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
  private final static SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd");
  private final static SimpleDateFormat sdfDays = new SimpleDateFormat("yyyyMMdd");
  private final static SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  private final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss");
   /**
     * 标准的日期时间字符串格式
     */
    public static final String STANDARD_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    /**
     * 标准的日期字符串格式
     */
    public static final String STANDARD_DATE_FORMAT = "yyyy-MM-dd";
    /**
   * 获取YYYY格式
   * @return
   */
  public static String getSdfTimes() {
    return sdfTimes.format(new Date());
  }
  /**
   * 获取YYYY格式
   * @return
   */
  public static String getYear() {
    return sdfYear.format(new Date());
  }
  /**
   * 获取YYYY-MM-DD格式
   * @return
   */
  public static String getDay() {
    return sdfDay.format(new Date());
  }
  /**
   * 获取YYYYMMDD格式
   * @return
   */
  public static String getDays(){
    return sdfDays.format(new Date());
  }
  /**
   * 获取YYYY-MM-DD HH:mm:ss格式
   * @return
   */
  public static String getTime() {
    return sdfTime.format(new Date());
  }
  /**
  * @Title: compareDate
  * @Description: TODO(日期比较,如果s>=e 返回true 否则返回false)
  * @param s
  * @param e
  * @return boolean  
  * @throws
  * @author fh
   */
  public static boolean compareDate(String s, String e) {
    if(fomatDate(s)==null||fomatDate(e)==null){
      return false;
    }
    return fomatDate(s).getTime() >=fomatDate(e).getTime();
  }
  /**
   * 格式化日期
   * @return
   */
  public static Date fomatDate(String date) {
    DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
    try {
      return fmt.parse(date);
    } catch (ParseException e) {
      e.printStackTrace();
      return null;
    }
  }
  /**
   * 校验日期是否合法
   * @return
   */
  public static boolean isValidDate(String s) {
    DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
    try {
      fmt.parse(s);
      return true;
    } catch (Exception e) {
      // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
      return false;
    }
  }
  /**
   * @param startTime
   * @param endTime
   * @return
   */
  public static int getDiffYear(String startTime,String endTime) {
    DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
    try {
      //long aa=0;
      int years=(int) (((fmt.parse(endTime).getTime()-fmt.parse(startTime).getTime())/ (1000 * 60 * 60 * 24))/365);
      return years;
    } catch (Exception e) {
      // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
      return 0;
    }
  }
  /**
     * <li>功能描述:时间相减得到天数
     * @param beginDateStr
     * @param endDateStr
     * @return
     * long 
     * @author Administrator
     */
    public static long getDaySub(String beginDateStr,String endDateStr){
        long day=0;
        java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
        java.util.Date beginDate = null;
        java.util.Date endDate = null;
            try {
        beginDate = format.parse(beginDateStr);
        endDate= format.parse(endDateStr);
      } catch (ParseException e) {
        e.printStackTrace();
      }
            day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000);
            //System.out.println("相隔的天数="+day);
        return day;
    }
    /**
     * 得到n天之后的日期
     * @param days
     * @return
     */
    public static String getAfterDayDate(String days) {
      int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateStr = sdfd.format(date);
        return dateStr;
    }
    /**
     * 得到n天之后是周几
     * @param days
     * @return
     */
    public static String getAfterDayWeek(String days) {
      int daysInt = Integer.parseInt(days);
        Calendar canlendar = Calendar.getInstance(); // java.util包
        canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
        Date date = canlendar.getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("E");
        String dateStr = sdf.format(date);
        return dateStr;
    }
    /**
     * 获取当前时间
     *
     * @return Date
     */
    public static Date getCurrentTime() {
      SimpleDateFormat format = new SimpleDateFormat(STANDARD_DATE_FORMAT);
        try {
      return format.parse(format.format(new Date()));
    } catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
        return new Date();
    }
    /**
     * 获取当前时间     yyyy-MM-dd HH:mm:ss格式
     *
     * @return Date
     */
    public static Date getCurrentTimes() {
      SimpleDateFormat format = new SimpleDateFormat(STANDARD_DATETIME_FORMAT);
        try {
      return format.parse(format.format(new Date()));
    } catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
        return new Date();
    }
    public static Date convertStringToDate(String dateString, String format) {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        Date date = null;
        try {
            date = dateFormat.parse(dateString);
        } catch (ParseException e) {
            // do nothing
        }
        return date;
    }
    /**
     * 对日期对象进行天数加减
     *
     * @param date 日期对象
     * @param days 天数,如果要将日期向前推算则使用负数
     * @return Date
     */
    public static Date addDays(Date date, int days) {
        Date newDate = new Date(date.getTime() + (long) days * 24 * 60 * 60 * 1000);
        return newDate;
    }
    public static void main(String[] args) {
      System.out.println(getDays());
      System.out.println(getAfterDayWeek("3"));
    }
}


目录
相关文章
|
2月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
147 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
2月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
17 1
|
4月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
29 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
4月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
4月前
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
68 0
|
5月前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
69 1
|
5月前
|
安全 Java 开发者
Java中的并发工具类与线程安全实现
Java中的并发工具类与线程安全实现
|
6月前
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式
|
5月前
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式
|
5月前
|
并行计算 Java API
Java中的并发工具类详解
Java中的并发工具类详解