日期时间工具类

import lombok.extern.slf4j.Slf4j;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class DateUtil {

    private static final SimpleDateFormat formatter = new SimpleDateFormat( "yyyyMMddHHmmss" );

    /**
     *  传入月份区间, 推算日期
     *
     * @param month 增加的月份数
     * @return 日期格式 yyyyMMddHHmmss
     */
    public static String dayCalculate(int month) {
        Date date = new Date();
        log.info("current date:[{}]", formatter.format(date));
        Calendar calendar = Calendar.getInstance();
        // 获取时区
        TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
        calendar.setTimeZone(tz);
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, month);
        String nowDate = formatter.format(calendar.getTime());
        log.info("now date:[{}]", nowDate);
        return nowDate;
    }

    /**
     *  根据开始时间和结束时间计算天数
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 天数
     * @throws ParseException 解析异常
     */
    public static int calculateTotalDays(String startTime, String endTime) throws ParseException{
        Date date1 = null;
        Date date = formatter.parse(startTime);
        long ts = date.getTime();
        date1 =  formatter.parse(endTime);
        long ts1 = date1.getTime();
        long ts2 = ts1-ts;
        int totalDays = 0;
        totalDays = (int) (ts2/(24*3600*1000)+1);
        return totalDays;
    }

    /**
     *  日期转换成字符串
     * @param date 日期
     * @return yyyyMMddHHmmss格式的日期
     * @throws ParseException 异常
     */
    public static String dateToStr(Date date) throws ParseException {
        return formatter.format(date);
    }

    /**
     * 时间日期转换
     * @param strDate 字符串yyyyMMddHHmmss
     * @return 字符串yyyy-MM-dd HH:mm:ss
     */
    public static String strToDateLong(String strDate) throws ParseException {
        Date date = new SimpleDateFormat("yyyyMMddHHmmss").parse(strDate);
        //再将时间转换为对应格式字符串
        return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date);
    }

    /**
     * 时间日期转换
     * @param strDate 字符串yyyyMMddHHmmss
     * @return date
     */
    public static Date strToDate(String strDate) {
        //1.使用atZone()方法将LocalDateTime转换为ZonedDateTime
        //2.将ZonedDateTime转换为Instant,并从中获取Date
        Date date = null;
        try {
            LocalDateTime fromDate = LocalDateTime.parse(strDate, DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
            // 获取时区
            TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
            ZoneId zoneId = tz.toZoneId();
            // 设置时区
            ZonedDateTime zdt = fromDate.atZone(zoneId);
            date = Date.from(zdt.toInstant());
        } catch (Exception e) {
            log.error(e.getMessage());
            return null;
        }
        return date;
    }
}

 

你可能感兴趣的:(日期时间工具类)