美文网首页
2020-07-09【日期工具类】

2020-07-09【日期工具类】

作者: skillplus | 来源:发表于2020-07-09 13:51 被阅读0次
import org.apache.commons.lang3.StringUtils;

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 CustomDateUtil {
    private static final String PATTERN_TIME = "yyyy-MM-dd HH:mm:ss";

    /**
     * 将指定的日期字符串转换成日期
     *
     * @param dateStr 日期字符串
     * @param pattern 格式
     * @return 日期对象
     */
    public static Date parseDate(String dateStr, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        Date date;
        try {
            date = sdf.parse(dateStr);
        } catch (ParseException e) {
            throw new RuntimeException("日期转化错误");
        }
        return date;
    }

    /**
     * 将指定的日期格式化成指定的日期字符串
     *
     * @param date    日期对象
     * @param pattern 格式
     * @return 格式化后的日期字符串
     */
    public static String dateFormate(Date date, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String dateStr;
        if (date == null) {
            return "";
        }
        dateStr = sdf.format(date);
        return dateStr;
    }

    /**
     * 查询指定日期前后指定的天数
     *
     * @param date 日期对象
     * @param days 天数
     * @return 日期对象
     */
    public static Date incr(Date date, int days) {
        if (date == null) {
            return null;
        }

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH, days);
        return calendar.getTime();
    }

    /**
     * 将LocalDate日期转化成Date
     *
     * @param localDate LocalDate对象
     * @return Date对象
     */
    public static Date localDateToDate(LocalDate localDate) {
        if (localDate == null) {
            return null;
        }
        ZoneId zoneId = ZoneId.systemDefault();
        ZonedDateTime zonedDateTime = localDate.atStartOfDay(zoneId);
        Date date = Date.from(zonedDateTime.toInstant());

        return date;
    }

    /**
     * 将Date转成LocalDate对象
     *
     * @param date Date对象
     * @return LocalDate对象
     */
    public static LocalDate dateToLocalDate(Date date) {
        if (date == null) {
            return null;
        }
        ZoneId zoneId = ZoneId.systemDefault();
        Instant instant = date.toInstant();
        LocalDate localDate = instant.atZone(zoneId).toLocalDate();

        return localDate;
    }


    /**
     * 计算两个时间相差的天数
     *
     * @param before 之前的时间
     * @param after  之后的时间,如果为null,默认当前时间
     * @return
     */
    public static Long difference(ZonedDateTime before, ZonedDateTime after) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //前时间
        String beforeStr = sdf.format(Date.from(before.toInstant()));
        //后时间
        String afterStr;
        if (after == null) {
            //默认为当前时间
            afterStr = sdf.format(Date.from(ZonedDateTime.now().toInstant()));
        } else {
            afterStr = sdf.format(Date.from(before.toInstant()));
        }
        return (parseDate(afterStr, "yyyy-MM-dd HH:mm:ss").getTime() - parseDate(beforeStr, "yyyy-MM-dd HH:mm:ss").getTime()) / (1000L * 3600L * 24L);
    }

    /**
     * Parse formatted String "yyyy-MM-dd HH:mm:ss" to ZonedDateTime
     *
     * @param dateStr
     * @return
     */
    public static ZonedDateTime strToZonedDateTime(String dateStr) {
        DateTimeFormatter beijingFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("Asia/Shanghai"));
        if (StringUtils.isBlank(dateStr)) {
            return null;
        }
        ZonedDateTime beijingDateTime = ZonedDateTime.parse(dateStr, beijingFormatter);
        return beijingDateTime.withZoneSameInstant(ZoneId.of("UTC"));
    }

    public static void main(String[] args) {

        System.out.println(difference(strToZonedDateTime("2020-07-08 13:00:00"), ZonedDateTime.now()));
    }
}

相关文章

网友评论

      本文标题:2020-07-09【日期工具类】

      本文链接:https://www.haomeiwen.com/subject/cnojcktx.html