java时间格式转换工具类

 该类主要用于格式化时间,以及计算两时间的时间差,代码都有注释

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;


public class DateUtils {

  
	public static DateTimeFormatter format_ymdhms = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

	private static DateTimeFormatter format_ymdhmssss = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
	
	private static DateTimeFormatter format_ymds = DateTimeFormatter.ofPattern("yyyyMMdd");

    public static DateTimeFormatter format_ymd = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    public static DateTimeFormatter format_ymdhms_string = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

    public static DateTimeFormatter format_ymdhms_no_signal = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

    public static SimpleDateFormat yyyyMMdd_format = new SimpleDateFormat("yyyy-MM-dd");

    public static SimpleDateFormat ymdhms_format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static DateTimeFormatter format_ymd_String = DateTimeFormatter.ofPattern("yyMMdd");



    /**
     * 将日期对象格式化成指定的字符串格式
     *
     * @param date         日期对象
     * @param formatString 格式化字符串
     * @return String
     */
    public static String getDateFormatString(Date date, String formatString) {

        String dateString = "";
        SimpleDateFormat format = new SimpleDateFormat(formatString);
        if (date != null) {
            dateString = format.format(date);
        }
        return dateString;
    }

    /**
     * 字符串转date
     * @param date 时间戳
     * @param format format
     * @return 时间
     */
    public static Date stringToDate(String date,SimpleDateFormat format){
        try {
            if(StringUtils.isBlank(date)){
                return null;
            }
            return format.parse(date);
        } catch (ParseException e) {
            logger.error(e.getMessage(),e);
        }
        return null;
    }


    /**
     * 字符串转date
     * @param date 时间戳
     * @return 时间
     */
    public static Date stringToDateStandard (String date){
        SimpleDateFormat format = ymdhms_format;
        if(StringUtils.isNotBlank(date)){
            if(date.split("-").length==3){
                if(date.split(":").length!=3){
                    format = yyyyMMdd_format;
                }
            }else if(date.split("-").length==2){
                format = new SimpleDateFormat("yyyy-MM");
            }
            try {
                return format.parse(date);
            } catch (ParseException e) {
                logger.error(e.getMessage(),e);
            }
        }
        return null;
    }


    /**
     * 获取当前时间
     * @return
     * @throws Exception
     */
    public static LocalDateTime getCurrentDate(){
    	LocalDateTime now = LocalDateTime.now();
    	return now;
    }
    
    /**
     * 获取当前时间字符串,格式为yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static String getCurrentDateStr(){
    	String nowtime=getCurrentDate().format(format_ymdhms);
    	return nowtime;
    }

    public static String getCurrentDateymd(){
        String nowtime=getCurrentDate().format(format_ymdhms_string);
        return nowtime;
    }

    public static String getCurrentDateyymd(){
        String nowtime=getCurrentDate().format(format_ymd_String);
        return nowtime;
    }

    /**
     * 获取当前时间字符串,格式为yyyyMMdd
     * @return
     */
    public static String getCurrentDateString(){
    	String nowtime=getCurrentDate().format(format_ymds);
    	return nowtime;
    }
    

    /**
     * 获取当前时间字符串,格式为yyyy-MM-dd
     * @return
     */
    public static String getCurrentDateStrymd(){
        String nowtime=getCurrentDate().format(format_ymd);
        return nowtime;
    }

    public static String getCurrentDateStr_MS(){
    	String nowtime=getCurrentDate().format(format_ymdhmssss);
    	return nowtime;
    }
    
    /**
     * 获取当前时间long值
     * @return
     */
    public static long getCurrentDataLong(){
        return new Date().getTime();
    }



    /**
     * 获取当前时间
     * @param format
     * @return
     * @throws Exception
     */
    public static Date getCurrentDate(SimpleDateFormat format){
        String tempDate = format.format(new Date());
        try {
            return format.parse(tempDate);
        } catch (ParseException e) {
            logger.error(e.getMessage(),e);
        }
        return null;
    }

    /**
     * @param date
     * @param newFormat
     * @return
     * @throws Exception
     */
    public static Date getDate(Date date, SimpleDateFormat newFormat) {
        String tempDate = newFormat.format(date);
        try {
            return newFormat.parse(tempDate);
        } catch (ParseException e) {
            logger.error(e.getMessage(),e);
        }
        return null;
    }

    public static String format(Date date, SimpleDateFormat format) {
        if(null == date){
            return "";
        }
        return format.format(date);
    }

    /**
     * 将给定的时间秒转换为中文格式的时分秒
     *
     * @param second
     * @return
     */
    public static String formatSecond_ZH_HMS(Integer second) {
        String result = "0秒";
        if (null != second) {
            int hours = (int) (second / (60 * 60));
            int minutes = (int) (second / 60 - hours * 60);
            int seconds = (int) (second - minutes * 60 - hours * 60 * 60);

            String format;
            Object[] array;

            if (hours > 0) {
                format = "%1$,d时%2$,d分%3$,d秒";
                array = new Object[]{hours, minutes, seconds};
            } else if (minutes > 0) {
                format = "%1$,d分%2$,d秒";
                array = new Object[]{minutes, seconds};
            } else {
                format = "%1$,d秒";
                array = new Object[]{seconds};
            }
            result = String.format(format, array);
        }
        return result;
    }

    /**
     * 对日期进行加法操作
     *
     * @param date
     * @param days
     * @return
     */
    public static Date addDay(Date date, Integer days) {
        if (null != date) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            cal.add(Calendar.DATE, days);
            return cal.getTime();
        }
        return null;
    }

    /**
     * 对日期进行加法操作
     *
     * @param date
     * @param month
     * @return
     */
    public static Date addMonth(Date date, Integer month) {
        if (null != date) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            cal.add(Calendar.MONTH, month);
            return cal.getTime();
        }
        return null;
    }

    /**
     * 对日期进行加法操作
     * @param date
     * @param hours
     * @return
     */
    public static Date addHours(Date date, Integer hours) {
        if (null != date) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            cal.add(Calendar.HOUR_OF_DAY, hours);
            return cal.getTime();
        }
        return null;
    }

    /**
     * 对日期的分钟进行加法操作
     * @param date
     * @param minutes
     * @return
     */
    public static Date addMinutes(Date date, Integer minutes) {
        if (null != date) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            cal.add(Calendar.MINUTE, minutes);
            return cal.getTime();
        }
        return null;
    }

    /**
     * 比较两个日期的大小
     *
     * @param date1
     * @param date2
     * @return 日期相等,返回0;前者大,返回1;后者大,返回-1;
     */
    public static int dateCompare(Date date1, Date date2) {
        Calendar c1 = Calendar.getInstance();
        c1.setTime(date1);

        Calendar c2 = Calendar.getInstance();
        c2.setTime(date2);

        return c1.compareTo(c2);
    }

    /**
     * 判断当前日期是否在指定日期区域内(包含起止日期) [startDate,endDate]
     * 

* [null,null] --> return 1; * * @param now * @param startDate * @param endDate * @return -1:超出并小于startDate;0:在范围内;1:超出并大于endDate; */ public static int validateDate(Date now, Date startDate, Date endDate) { if (null == startDate && null == endDate) { return 0; } if (null == startDate) { //当前时间大于endDate if (dateCompare(now, endDate) == 1) { return 1; } else { return 0; } } else { if (null == endDate) { //当前时间小于startDate if (dateCompare(startDate, now) == 1) { return -1; } else { return 0; } } else { if (dateCompare(startDate, now) == 1) { return -1; } else if (dateCompare(now, endDate) == 1) { return 1; } else { return 0; } } } } /** * 计算两个日期先差多少秒 * @param pre 前一个日期 * @param after 后一个日期 * @return */ public static long calTimeDifference(Date pre,Date after){ return (after.getTime()-pre.getTime())/1000; } /** * 计算两个时间相差的天数 * @param stardate * @param enddate * @return */ public static int getHour(Date stardate,Date enddate){ long nd = 1000 * 24 * 60 * 60; long nh = 1000 * 60 * 60; long nm = 1000 * 60; long diff=enddate.getTime()-stardate.getTime(); long day = diff / nd; long hour = diff % nd / nh; long min = diff % nd % nh / nm; return (int)day; } /** * 结束时间与当前时间计算相差的月数 * @param enddate * @return */ public static int getMonthSpace(String enddate, DateTimeFormatter format) { LocalDate formatted = LocalDate.parse(enddate,format); LocalDate today = LocalDate.now(); Period per = Period.between(today,formatted); if(per.getYears() == 0 ){ return per.getMonths(); }else if(per.getYears() > 0 ){ return (per.getYears() * 12) + per.getMonths(); } return (per.getYears() * 12) + per.getMonths(); } /** * 获取某个时间段之前的时间点 * @return */ public static String getSomeTimeStapStr(String sign){ LocalDateTime beginDateTime =null; if (sign.equals("day")) {//一天前时间 beginDateTime =LocalDateTime.now().minusDays(1L); }else if(sign.equals("week")){ beginDateTime =LocalDateTime.now().minusWeeks(1L); }else if (sign.equals("month")) { beginDateTime =LocalDateTime.now().minusMonths(1L); }else if (sign.equals("year")) { beginDateTime =LocalDateTime.now().minusYears(1L); } String beginTime=beginDateTime.format(format_ymdhms); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { long timestap = sdf.parse(beginTime).getTime(); beginTime = timestap+""; } catch (ParseException e) { e.printStackTrace(); } return beginTime; } public static String getSomeTimeDateStr(String sign){ String beginTime=""; LocalDateTime beginDateTime =null; if (sign.equals("day")) {//一天前时间 beginDateTime =LocalDateTime.now().minusDays(1L); }else if(sign.equals("week")){ beginDateTime =LocalDateTime.now().minusWeeks(1L); }else if (sign.equals("month")) { beginDateTime =LocalDateTime.now().minusMonths(1L); }else if (sign.equals("year")) { beginDateTime =LocalDateTime.now().minusYears(1L); } if (beginDateTime!=null) { beginTime = beginDateTime.format(format_ymdhms); } return beginTime; } /** * 获取失效时间点(在什么时间失效) * @param minutes 有效分钟数 * @return */ public static LocalDateTime getInvalidLocalDateTime(Long minutes){ return LocalDateTime.now().minusMinutes(minutes); } /** * 获取当前年份 * @return */ public static String getCurrentYear(){ Calendar instance = Calendar.getInstance(); return instance.get(Calendar.YEAR)+""; } /** * 获取当前月份 * @return */ public static String getCurrentMonth(){ Calendar instance = Calendar.getInstance(); int month = instance.get(Calendar.MONTH); String result; if (month < 10){ result = "0" + month; }else { result = month+""; } return result; } /** 获取无符号的当前时间 * @return */ public static String getCurrentDateStrNoSignal(){ return getCurrentDate().format(format_ymdhms_no_signal); } /** * 获取前几个小时的时间 * @param hours * @return */ public static String getNextHourDateStrNoSignal(long hours){ return LocalDateTime.now().plusHours(hours).format(format_ymdhms_no_signal); } public static Date localDateTimeToDate(LocalDateTime localDateTime) { ZoneId zone = ZoneId.systemDefault(); Instant instant = localDateTime.atZone(zone).toInstant(); return Date.from(instant); } /** * 小时取整 * @param date * @param hour * @return */ public static Date integralHour(Date date,Integer hour) { if(date==null||hour==null){ return null; } long l = date.getTime()- 1; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:00:00"); try { Date parse = sdf.parse(sdf.format(new Date(l))); return addHours(parse, hour); } catch (ParseException e) { return null; } } /** * 分钟取整 * 以十分钟为单位 ,去除尾端,加上 参数 46->40+minutes*10 * @param date * @param minutes * @return */ public static Date integral10Min(Date date,Integer minutes) { if(date==null||minutes==null){ return null; } Calendar cal = Calendar.getInstance(); cal.setTime(date); int i = cal.get(Calendar.MINUTE);//获取分钟 if(i%10==0){ minutes--; } minutes=minutes*10-i%10; long l = date.getTime()- 1; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:00"); try { Date parse = sdf.parse(sdf.format(new Date(l))); return addMinutes(parse, minutes); } catch (ParseException e) { return null; } } /** * 天数取整 * @param date * @param day * @return */ public static Date integralDay(Date date,Integer day) { if(date==null||day==null){ return null; } long l = date.getTime()- 1; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); try { Date parse = sdf.parse(sdf.format(new Date(l))); return addDay(parse, day); } catch (ParseException e) { return null; } } public static void main(String[]args)throws Exception{ // Date date= new Date(); // Date after = new Date(); // System.out.println(calTimeDifference(date,after)); } }

 

你可能感兴趣的:(java)