dateUtil 日期工具类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dateUtil 日期工具类相关的知识,希望对你有一定的参考价值。

package com.lbi.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;




/**
 * 日期工具类 〈一句话功能简述〉<br>
 * 〈功能详细描述〉
 * 
 * @author 12070675
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class DateUtil {
    
    protected static Logger  logger   = LoggerFactory.getLogger(DateUtil.class);
    
    /**
     * 时间的各种格式器
     */
    public static final String DATE_STYLE = "yyyy-MM-dd";
    public static final String DATE_STYLE2 = "yyyyMMdd";
    public static final String DATE_YEAR_MONTH = "yyyyMM";
    public static final String DATE_YM = "yyyy-MM";
    public static final String DATE_TIME_STYLE = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE_TIME_STYLE3 = "yyyyMMddHHmmss";
    public static final String DATE_TIME_STYLE4 = "yyyyMMddHHmmssSSS";
    public static final String DATE_YEAR = "yyyy";
    public static final String DATE_TIME = "HH:mm:ss";

   /* private static final SimpleDateFormat SDF1 = new SimpleDateFormat(DATE_STYLE);
    private static final SimpleDateFormat SDF2 = new SimpleDateFormat(DATE_TIME_STYLE);
    private static final SimpleDateFormat SDF3 = new SimpleDateFormat(DATE_TIME_STYLE3);
    private static final SimpleDateFormat SDF4 = new SimpleDateFormat(DATE_TIME_STYLE4);
    private static final SimpleDateFormat SDF5 = new SimpleDateFormat(DATE_TIME);
    private static final SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);*/

    public static synchronized String formatDate(Date date) {
        SimpleDateFormat SDF1 = new SimpleDateFormat(DATE_STYLE);
        String dateStr = SDF1.format(date);
        return dateStr;
    }
    
    public static synchronized String formatDate(Date date,String sdf) {
        SimpleDateFormat SDF1 = new SimpleDateFormat(sdf);
        String dateStr = SDF1.format(date);
        return dateStr;
    }

    public static synchronized String formatDate2(Date date) {
        SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);
        String dateStr = SDF6.format(date);
        return dateStr;
    }

    public static synchronized String formatDateTime(Date date) {
        SimpleDateFormat SDF2 = new SimpleDateFormat(DATE_TIME_STYLE);
        String dateStr = SDF2.format(date);
        return dateStr;
    }

    public static synchronized String formatTime(Date date) {
        SimpleDateFormat SDF5 = new SimpleDateFormat(DATE_TIME);
        String dateStr = SDF5.format(date);
        return dateStr;
    }

    public static synchronized String formatDateTime2(Date date) {
        SimpleDateFormat SDF3 = new SimpleDateFormat(DATE_TIME_STYLE3);
        String dateStr = SDF3.format(date);
        return dateStr;
    }

    public static synchronized Date parseToDate(String dateStr) {
        try {
            SimpleDateFormat SDF1 = new SimpleDateFormat(DATE_STYLE);
            Date date = SDF1.parse(dateStr); // sdf1.parse(dateStr);
            return date;
        } catch (ParseException e) {
            throw new LbiRuntimeException("日期转到成" + DATE_STYLE + "格式失败");
        }
    }

    public static synchronized Date parseToDateTime(String dateStr) {
        try {
            SimpleDateFormat SDF2 = new SimpleDateFormat(DATE_TIME_STYLE);
            Date date = SDF2.parse(dateStr); // sdf1.parse(dateStr);
            return date;
        } catch (ParseException e) {
            throw new LbiRuntimeException("日期转到成" + DATE_TIME_STYLE + "格式失败");
        }
    }
    
    public static synchronized Date parseToDateTimeEmpty(String dateStr) {
        try {
            SimpleDateFormat SDF3 = new SimpleDateFormat(DATE_TIME_STYLE3);
            Date date = SDF3.parse(dateStr);
            return date;
        } catch (ParseException e) {
            throw new LbiRuntimeException("参数:" + dateStr + "日期转到成" + DATE_TIME_STYLE3 + "格式失败");
        }
    }

    // 生成17位编码
    public static synchronized String formatDateToLongChar(Date date) {
        SimpleDateFormat SDF4 = new SimpleDateFormat(DATE_TIME_STYLE4);
        String dateStr = SDF4.format(date);
        return dateStr;
    }

    /**
     * 转换时间的格式yyyy-MM-dd HH:mm:ss到yyyyMMddHHmmss
     * 
     * @param date
     * @return
     * @throws Exception
     */
    public static String convertToDateStr(String date) {
        StringBuilder sbr = new StringBuilder();
        sbr.append(date.substring(0, 4));
        sbr.append(date.substring(5, 7));
        sbr.append(date.substring(8, 10));
        sbr.append(date.substring(11, 13));
        sbr.append(date.substring(14, 16));
        sbr.append(date.substring(17, 19));
        return sbr.toString();

    }

    /**
     * 
     * 功能描述: <br>
     * 当前日期加减n天后的日期
     * 
     * @param n
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String nDaysAftertoday(String str, int n) {
        SimpleDateFormat df = new SimpleDateFormat(DATE_STYLE);
        try {
            Date myDate = df.parse(str);
            Calendar rightNow = Calendar.getInstance();
            rightNow.setTime(myDate);
            rightNow.add(Calendar.DAY_OF_MONTH, +n);
            return df.format(rightNow.getTime());
        } catch (ParseException e) {
            throw new LBIException("时间格式转换失败");
        }
    }
    
    /**
     * 
     * 功能描述: <br>
     * 当前日期加减n天后的日期
     * 
     * @param n
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String nHoursAftertoday(Date date, int n) {
        SimpleDateFormat df = new SimpleDateFormat(DATE_TIME_STYLE3);
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(date);
        rightNow.add(Calendar.HOUR_OF_DAY, +n);
        return df.format(rightNow.getTime());
    }

    /**
     * 
     * 功能描述: <br>
     * 当前日期加减n天后的日期
     * 
     * @param n
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String nDaysAftertoday(Date date, int n) {
        SimpleDateFormat df = new SimpleDateFormat(DATE_STYLE2);
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(date);
        rightNow.add(Calendar.DAY_OF_MONTH, +n);
        return df.format(rightNow.getTime());
    }
    
    
  
    public static String nDaysAftertoday(int n,String sdf) {
        SimpleDateFormat df = new SimpleDateFormat(sdf);
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(new Date());
        rightNow.add(Calendar.DAY_OF_MONTH, +n);
        return df.format(rightNow.getTime());
    }
    
    public static String nYearsAftertoday(Date date, int n) {
        SimpleDateFormat df = new SimpleDateFormat(DATE_YEAR);
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(date);
        rightNow.add(Calendar.YEAR, +n);
        return df.format(rightNow.getTime());
    }

    public static int compareDate(String date1, String date2) {
        SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
        try {
            Date dt1 = df.parse(date1);
            Date dt2 = df.parse(date2);
            if (dt1.getTime() > dt2.getTime()) {
                return 1;
            } else if (dt1.getTime() < dt2.getTime()) {
                return -1;
            }
        } catch (ParseException exception) {
            throw new LBIException("时间格式转换失败");
        }
        return 0;
    }

    public static boolean validateTime(String date) {
        try {
            new SimpleDateFormat(DATE_TIME_STYLE).parse(date);
        } catch (ParseException e) {
            return false;
        }
        String datePattern1 = "\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}";
        Pattern pattern = Pattern.compile(datePattern1);
        Matcher match = pattern.matcher(date);
        return match.matches();
    }

    public static String getHours() {
        Calendar cal = Calendar.getInstance(Locale.CHINA);
        int hour = cal.get(Calendar.HOUR_OF_DAY);// 小时
        if (hour == 0) {
            return "00";
        } else if (hour < 11) {
            return "0" + (hour - 1);
        } else {
            return String.valueOf(hour - 1);
        }
    }

    /**
     * 
     * 获取当前时间相隔i小时的时间<br>
     * 格式是:yyyyMMddHHmm
     *
     * @param i
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String getTimeToMinute(int i) {
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        cal.set(Calendar.HOUR, cal.get(Calendar.HOUR) + i);
        String time = sdf.format(cal.getTime());
        return time.substring(0, 12);
    }

    public static String getFirstDayOfMonth() {
        SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);
        Calendar c = Calendar.getInstance();
        c.add(Calendar.MONTH, 0);
        c.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
        String first = SDF6.format(c.getTime());
        return first;
    }
    
    public static String getFirstDayOfMonth(String dateStr) {
        SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);
        Date date = parseToDate(dateStr);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.add(Calendar.MONTH, 0);
        c.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
        String first = SDF6.format(c.getTime());
        return first;
    }

    public static String getLastDayOfFrontMonth() {
        SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);
        Calendar c = Calendar.getInstance();
        c.set(Calendar.DAY_OF_MONTH, 0);
        String first = SDF6.format(c.getTime());
        return first;
    }
    
    public static String getLastDayOfFrontMonth(String dateStr) {
        SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);
        Date date = parseToDate(dateStr);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.DAY_OF_MONTH, 0);
        String first = SDF6.format(c.getTime());
        return first;
    }

    /**
     * 
     * 功能描述: h获取上一个季度的最后一天<br>
     * 〈功能详细描述〉
     *
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String getLastDayOfFrontQuarter() {
        SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);
        Calendar c = Calendar.getInstance();
        int month = c.get(Calendar.MONTH);// 获取当前月份0-11
        int n = month / 3;
        month = n * 3;
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, 0);
        String first = SDF6.format(c.getTime());
        return first;
    }
    
    public static String getLastDayOfFrontQuarter(String dateStr) {
        SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);
        Date date = parseToDate(dateStr);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int month = c.get(Calendar.MONTH);// 获取当前月份0-11
        int n = month / 3;
        month = n * 3;
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, 0);
        String first = SDF6.format(c.getTime());
        return first;
    }

    public static String getFirstDayOfYear() {
        SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);
        Calendar c = Calendar.getInstance();
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.set(Calendar.DAY_OF_MONTH, 1);
        String first = SDF6.format(c.getTime());
        return first;
    }
    
    public static String getFirstDayOfYear(String dateStr) {
        SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);
        Date date = parseToDate(dateStr);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        c.set(Calendar.MONTH, Calendar.JANUARY);
        c.set(Calendar.DAY_OF_MONTH, 1);
        String first = SDF6.format(c.getTime());
        return first;
    }

    /**
     * 
     * 功能描述: 获取日期的星期<br>
     * 〈功能详细描述〉
     *
     * @param dateStr格式为YYYYMMDD
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String getWeek(String dateStr) {
        try {
            SimpleDateFormat SDF6 = new SimpleDateFormat(DATE_STYLE2);
            Date date = SDF6.parse(dateStr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            String week = LBIConstants.WEEKS.get(String.valueOf(calendar.get(Calendar.DAY_OF_WEEK)));
            return week;
        } catch (ParseException e) {
            return null;
        }

    }

    
    /**
     * 
     * 功能描述: <br>
     * 当前日期加减n天后的日期
     * 
     * @param n
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String nMonthsAftertoday(Date date, int n) {
        SimpleDateFormat df = new SimpleDateFormat(DATE_YEAR_MONTH);
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(date);
        rightNow.add(Calendar.MONTH, +n);
        return df.format(rightNow.getTime());
    }
    
    /**
     * 
     * 功能描述: <br>
     * 当前日期加减n天后的日期
     * 
     * @param n
     * @return
     * @throws ParseException 
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String nMonthsAftertoday(String date, int n) {
        SimpleDateFormat df = new SimpleDateFormat(DATE_YEAR_MONTH);
        Calendar rightNow = Calendar.getInstance();
        try {
            rightNow.setTime(df.parse(date));
        } catch (ParseException e) {
            logger.error("",e);
        }
        rightNow.add(Calendar.MONTH, +n);
        return df.format(rightNow.getTime());
    }
    
    
    /**
     * 
     * 功能描述: <br>
     * 当前日期加减n天后的日期
     * 
     * @param n
     * @return
     * @throws ParseException 
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String getDateByFormat(String fmt, Date date){
        SimpleDateFormat df = new SimpleDateFormat(fmt);
        return df.format(date);
    }
    
    
    public static void main(String[] args) throws ParseException {
        System.out.println(DateUtil.nMonthsAftertoday(new Date(), -1));
    }
}

 

以上是关于dateUtil 日期工具类的主要内容,如果未能解决你的问题,请参考以下文章

3hutool源码分析:DateUtil(时间工具类)-获取日期的各种内容

日期工具类 DateUtils(继承org.apache.commons.lang.time.DateUtils类)

DateUtil日期工具类

dateUtil 日期工具类

Android工具类篇 日期工具类DateUtil 星期获取(下篇)

Java工具类DateUtils实例详解