日期转换运算工具类

一、日期转换运算

Java 中的日期常用转换

二、工具类

代码如下:

package com.common.utils.time;

import org.apache.commons.lang3.time.DateFormatUtils;

import java.lang.management.ManagementFactory;
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 extends org.apache.commons.lang3.time.DateUtils {
    private static final int[] dayArr = new int[]{20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22};
    private static final String[] constellationArr = new String[]{"摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座"};
    public static final String PATTERN_FULL = "yyyy-MM-dd HH:mm:ss.SSS";
    public static final String PATTERN_SHORT_FULL = "yyyyMMddHHmmssSSS";
    public static final String PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss";
    public static final String PATTERN_DATETIME_MINUTE = "yyyy-MM-dd HH:mm";
    public static final String PATTERN_DATETIME_HOUR = "yyyy-MM-dd HH";
    public static final String PATTERN_DATETIME_CN = "yyyy年MM月dd日HH时mm分ss秒";
    public static final String PATTERN_SHORT_DATETIME = "yyyyMMddHHmmss";
    public static final String PATTERN_DATE = "yyyy-MM-dd";
    public static final String PATTERN_DATE_CN = "yyyy年MM月dd日";
    public static final String PATTERN_SHORT_DATE = "yyyyMMdd";
    public static final String PATTERN_TIME = "HH:mm:ss";
    public static final String PATTERN_TIME_CN = "HH时mm分ss秒";
    public static final String PATTERN_SHORT_TIME = "HHmmss";
    public static final String PATTERN_YEAR = "yyyy";
    public static final String PATTERN_SHORT = "yyyyMMdd";

    private static String[] parsePatterns = {
            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};

    public DateUtils() {
    }

    public static String formatFull(Date date) {
        return format(date, "yyyy-MM-dd HH:mm:ss.SSS");
    }

    public static String formatDateTime(Date date) {
        return format(date, "yyyy-MM-dd HH:mm:ss");
    }

    public static String formatDateTimeCN(Date date) {
        return format(date, "yyyy年MM月dd日HH时mm分ss秒");
    }

    public static String formatShortDateTime(Date date) {
        return format(date, "yyyyMMddHHmmss");
    }

    public static String formatDate(Date date) {
        return format(date, "yyyy-MM-dd");
    }

    public static String formatYear(Date date) {
        return format(date, PATTERN_YEAR);
    }

    public static String formatShort(Date date) {
        return format(date, PATTERN_SHORT);
    }

    public static String formatDateCN(Date date) {
        return format(date, "yyyy年MM月dd日");
    }

    public static String formatShortDate(Date date) {
        return format(date, "yyyyMMdd");
    }

    public static String formatTime(Date date) {
        return format(date, "HH:mm:ss");
    }

    public static String formatTimeCN(Date date) {
        return format(date, "HH时mm分ss秒");
    }

    public static String formatShortTime(Date date) {
        return format(date, "HHmmss");
    }

    public static String format(Date date, String pattern) {
        SimpleDateFormat formatTime = new SimpleDateFormat(pattern);
        return formatTime.format(date);
    }

    public static Date parseFull(String date) {
        return parse(date, "yyyy-MM-dd HH:mm:ss.SSS");
    }

    public static Date parseShortFull(String date) {
        return parse(date, "yyyyMMddHHmmssSSS");
    }

    public static Date parseDateTime(String date) {
        return parse(date, "yyyy-MM-dd HH:mm:ss");
    }

    public static Date parseShortDateTime(String date) {
        return parse(date, "yyyyMMddHHmmss");
    }

    public static Date parseDate(String date) {
        return parse(date, "yyyy-MM-dd");
    }
    public static Date parseDate(Date date) {
        String value = formatDate(date);
        return parse(value, "yyyy-MM-dd");
    }

    public static Date parseShortDate(String date) {
        return parse(date, "yyyyMMdd");
    }

    public static Date parseTime(String date) {
        return parse(date, "HH:mm:ss");
    }

    public static String nowDateTime() {
        return formatDateTime(new Date());
    }

    public static String nowDate() {
        return formatDate(new Date());
    }

    public static String nowShortDate() {
        return formatShortDate(new Date());
    }

    public static String nowTime() {
        return formatTime(new Date());
    }

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


    public static String nowShort() {
        return format(new Date(), PATTERN_SHORT);
    }


    public static Date parse(String date, String pattern) {
        SimpleDateFormat formatTime = new SimpleDateFormat(pattern);

        try {
            return formatTime.parse(date);
        } catch (ParseException var4) {
            throw new IllegalArgumentException("parse error.date:" + date + " pattern" + pattern);
        }
    }
    public static String getSysYear() {
        Calendar calendar = Calendar.getInstance();
        return String.valueOf(calendar.get(Calendar.YEAR));
    }

    public static String getSysYearDetail() {
        int year = LocalDateTime.now().getYear();
        LocalDateTime localDateTime = LocalDateTime.of(year,12,31,23,59,59);
        return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

    public static String getWeekOfDay(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        switch(calendar.get(7)) {
            case 1:
                return "周日";
            case 2:
                return "周一";
            case 3:
                return "周二";
            case 4:
                return "周三";
            case 5:
                return "周四";
            case 6:
                return "周五";
            case 7:
                return "周六";
            default:
                return "";
        }
    }

    public static String getConstellation(int month, int day) {
        return day < dayArr[month - 1] ? constellationArr[month - 1] : constellationArr[month];
    }

    public static String getZodiac(int year) {
        if (year < 1900) {
            return "未知";
        } else {
            int start = 1900;
            String[] zodiacs = new String[]{"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"};
            return zodiacs[(year - start) % zodiacs.length];
        }
    }

    public static int getAgeFromBirthDay(Date birthDay) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(birthDay);
        Calendar now = Calendar.getInstance();
        if (cal.after(now)) {
            throw new IllegalArgumentException("The birthDay is after now.");
        } else {
            int age = now.get(1) - cal.get(1);
            int month = cal.get(2);
            int day = cal.get(5);
            if (month == 2 && day == 29) {
                if (now.get(2) < 2) {
                    --age;
                }
            } else if (cal.get(2) > now.get(2) || cal.get(2) == now.get(2) && cal.get(5) > now.get(5)) {
                --age;
            }

            return age;
        }
    }

    /**
     * 返回 年月日小时分秒
     *
     * @return yyyyMMddHHmmss
     */
    public static String getTodayChar14() {
        return DateUtils.format(new Date(), "yyyyMMddHHmmss");
    }

    /**
     * 返回 年月日
     *
     * @return yyyyMMdd
     */
    public static String getTodayChar15() {
        return DateUtils.format(new Date(), "yyyyMMdd");
    }

    /**
     * 返回 年月日小时分秒 毫秒
     *
     * @return yyyyMMddHHmmssS
     */
    public static String getTodayChar17() {
        String dateString = DateUtils.format(new Date(), "yyyyMMddHHmmss");
        int length = dateString.length();

        if (length < 17) {
            String endStr = dateString.substring(14, length);
            int len = endStr.length();
            for (int i = 0; i < 3 - len; i++) {
                endStr = "0" + endStr;
            }
            dateString = dateString.substring(0, 14) + endStr;
        }
        return dateString;
    }

    public static Date getDateNow() {
        return new Date();
    }

    public static LocalDate getLocalDateNow() {
        return LocalDate.now();
    }

    public static LocalDateTime getLocalDateTimeNow() {
        return LocalDateTime.now();
    }

    public static Long getTimestampNow() {
        Calendar calendar = Calendar.getInstance();
        long timestamp = calendar.getTimeInMillis();
        return timestamp;
    }

    //Date -> 毫秒时间戳
    public static String dateToTimeStampTime(Date date) {
        long time = date.getTime();
        return String.valueOf(time);
    }

    //Date -> LocalDateTime
    public static LocalDateTime dateToLocalDateTime(Date date) {
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        return LocalDateTime.ofInstant(instant, zone);
    }

    //Date -> LocalDate
    public static LocalDate dateToLocalDate(Date date) {
        LocalDateTime localDateTime = dateToLocalDateTime(date);
        return localDateTime.toLocalDate();
    }

    //Date -> LocalTime
    public static LocalTime dateToLocalTime(Date date) {
        LocalDateTime localDateTime = dateToLocalDateTime(date);
        return localDateTime.toLocalTime();
    }

    //timeStamp时间戳 -> Date
    public static Date timeStampToDate(Long timeStamp) {
        String dateString = sdf.format(new Date(timeStamp)); // Date对象转换为字符串
        Date date = null; // 字符串转换为Date对象
        try {
            date = sdf.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    //LocalDateTime -> Date
    public static Date localDateTimeToDate(LocalDateTime localDateTime) {
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDateTime.atZone(zone).toInstant();
        return Date.from(instant);
    }

    //LocalDate -> Date
    public static Date localDateToDate(LocalDate localDate) {
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
        return Date.from(instant);
    }

    //LocalTime -> Date
    public static Date localTimeToDate(LocalTime localTime) {
        LocalDate localDate = LocalDate.now();
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = LocalDateTime.of(localDate, localTime).atZone(zone).toInstant();
        return Date.from(instant);
    }

    //LocalDateTime 增加多少秒
    public static LocalDateTime localDateTimePlusSecond(LocalDateTime localDateTime, Long second) {
        LocalDateTime time = localDateTime.plusSeconds(second);
        return time;
    }

    //两个LocalDateTime相差多少毫秒
    public static Long durationMillis(LocalDateTime start, LocalDateTime end)
    {
        Duration duration = Duration.between(start,end);
        long millis = duration.toMillis();
        return millis;
    }

    //两个Date相差多少相差多少毫秒
    public static Long durationMillis(Date start, Date end)
    {
        Duration duration = Duration.between(dateToLocalDateTime(start),dateToLocalDateTime(end));
        long millis = duration.toMillis();
        return millis;
    }

    //两个LocalDateTime相差多少秒
    public static Long durationSeconds(LocalDateTime start, LocalDateTime end)
    {
        Duration duration = Duration.between(start,end);
        long seconds = duration.getSeconds();
        return seconds;
    }

    //两个Date相差多少相差多少秒
    public static Long durationSeconds(Date start, Date end)
    {
        Duration duration = Duration.between(dateToLocalDateTime(start),dateToLocalDateTime(end));
        long seconds = duration.getSeconds();
        return seconds;
    }

    //将秒转化为时分秒的格式
    public static String formatHMS(long second) {
        int temp = (int) second;
        int hh = temp / 3600;
        int mm = (temp % 3600) / 60;
        int ss = (temp % 3600) % 60;
        return (hh < 10 ? ("0" + hh) : hh) + ":" +
                (mm < 10 ? ("0" + mm) : mm) + ":" +
                (ss < 10 ? ("0" + ss) : ss);
    }

    /**
     * 计算是否超时,超时多久
     * @param start 开始时间
     * @param second 超时几秒钟
     * @param now 当前时间
     * @return
     */
    public static Long durationSeconds(Date start, long second, Date now)
    {
        LocalDateTime time = dateToLocalDateTime(start);
        LocalDateTime startTime = localDateTimePlusSecond(time, second);
        LocalDateTime endTime = dateToLocalDateTime(now);
        Duration duration = Duration.between(startTime,endTime);
        long seconds = duration.getSeconds();
        return seconds;
    }

    /**
     * 增加 LocalDateTime ==> Date
     */
    public static Date toDate(LocalDateTime temporalAccessor)
    {
        ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
        return Date.from(zdt.toInstant());
    }

    /**
     * 增加 LocalDate ==> Date
     */
    public static Date toDate(LocalDate temporalAccessor)
    {
        LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
        ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
        return Date.from(zdt.toInstant());
    }

    /**
     * 获取当前日期, 默认格式为yyyy-MM-dd
     *
     * @return String
     */
    public static String getDate()
    {
        return dateTimeNow(PATTERN_DATE);
    }

    public static final String getTime()
    {
        return dateTimeNow(PATTERN_DATETIME);
    }

    public static final String dateTimeNow()
    {
        return dateTimeNow(PATTERN_SHORT_DATETIME);
    }

    public static final String dateTimeNow(final String format)
    {
        return parseDateToStr(format, new Date());
    }

    public static final String dateTime(final Date date)
    {
        return parseDateToStr(PATTERN_DATE, date);
    }

    public static final String parseDateToStr(final String format, final Date date)
    {
        return new SimpleDateFormat(format).format(date);
    }

    public static final Date dateTime(final String format, final String ts)
    {
        try
        {
            return new SimpleDateFormat(format).parse(ts);
        }
        catch (ParseException e)
        {
            throw new RuntimeException(e);
        }
    }

    /**
     * 日期路径 即年/月/日 如2018/08/08
     */
    public static final String datePath()
    {
        Date now = new Date();
        return DateFormatUtils.format(now, "yyyy/MM/dd");
    }

    /**
     * 日期路径 即年/月/日 如20180808
     */
    public static final String dateTime()
    {
        Date now = new Date();
        return DateFormatUtils.format(now, "yyyyMMdd");
    }

    /**
     * 日期型字符串转化为日期 格式
     */
    public static Date parseDate(Object str)
    {
        if (str == null)
        {
            return null;
        }
        try
        {
            return parseDate(str.toString(), parsePatterns);
        }
        catch (ParseException e)
        {
            return null;
        }
    }

    /**
     * 获取服务器启动时间
     */
    public static Date getServerStartDate()
    {
        long time = ManagementFactory.getRuntimeMXBean().getStartTime();
        return new Date(time);
    }

    /**
     * 计算两个时间差
     */
    public static String getDatePoor(Date endDate, Date nowDate)
    {
        long nd = 1000 * 24 * 60 * 60;
        long nh = 1000 * 60 * 60;
        long nm = 1000 * 60;
        // long ns = 1000;
        // 获得两个时间的毫秒时间差异
        long diff = endDate.getTime() - nowDate.getTime();
        // 计算差多少天
        long day = diff / nd;
        // 计算差多少小时
        long hour = diff % nd / nh;
        // 计算差多少分钟
        long min = diff % nd % nh / nm;
        // 计算差多少秒//输出结果
        // long sec = diff % nd % nh % nm / ns;
        return day + "天" + hour + "小时" + min + "分钟";
    }


    public static Date addHour(Date time, int hour) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(time);
        calendar.add(Calendar.HOUR_OF_DAY, hour);
        return calendar.getTime();
    }

}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@蓝眼睛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值