Date 时间操作工具类


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author AcmenXD
 * @version v1.0
 * @github https://github.com/AcmenXD
 * @date 2016/12/15 16:10
 * @detail 时间工具类
 */
public class DateUtils {
    /**
     * 计算机日期初始时间
     */
    public static final String INIT_DATE = "1970-1-1 8:00:00";
    /**
     * formatStr 格式
     * 以下属性可以随意组合使用,但转换时需注意,可能出现错误
     */
    public static final String yyyy = "yyyy"; //年
    public static final String MM = "MM"; //月
    public static final String dd = "dd"; //日
    public static final String HH = "HH"; //时
    public static final String mm = "mm"; //分
    public static final String ss = "ss"; //秒
    public static final String E = "E"; //周几
    public static final String EEEE = "EEEE"; //星期几
    public static final String a = "a"; //上下午
    public static final String yMd = yyyy + "-" + MM + "-" + dd; //yyyy-MM-dd (年-月-日)
    public static final String Hms = HH + ":" + mm + ":" + ss; //HH:mm:ss (时:分:秒)
    public static final String yMdHms = yMd + " " + Hms; //yyyy-MM-dd HH:mm:ss (年-月-日 时:分:秒)
    public static final String yMdHms2 = yyyy + MM + dd + HH + mm + ss; //yyyyMMddHHmmss (年月日时分秒)
    public static final String yMdHmsEa = yMdHms + " " + EEEE + " " + a; //yyyy-MM-dd HH:mm:ss E a(年-月-日 时:分:秒 星期几 上下午)

    /**
     * 获取当前日期 Date类型
     */
    public static Date nowDate() {
        return new Date();
    }

    /**
     * 获取当前日期  : long(毫秒) -> 2016-12-15 16:10:10 (formatStr)
     */
    public static String nowDate(String formatStr) {
        return dateFormat(nowDate().getTime(), formatStr);
    }

    /**
     * 日期格式转换 : long(毫秒) -> 2016-12-15 16:10:10 (formatStr)
     */
    public static String dateFormat(long date, String formatStr) {
        return new SimpleDateFormat(formatStr).format(new Date(date));
    }

    /**
     * 日期格式转换 : 2016-12-15 16:10:10 -> long(毫秒)
     */
    public static long timeFormat(String timeStr) {
        return timeFormat(timeStr, yMdHms);
    }

    /**
     * 日期格式转换 : 2016-12-15 16:10:10(formatStr) -> long(毫秒)
     */
    public static long timeFormat(String timeStr, String formatStr) {
        long time = 0;
        try {
            SimpleDateFormat sf = new SimpleDateFormat(formatStr);
            time = sf.parse(timeStr).getTime();
        } catch (ParseException pE) {
            pE.printStackTrace();
        }
        return time;
    }

    /**
     * 日期格式转换 : 2016-12-15 16:10:10 -> int[]{year,month,day,hour,minute,second}
     */
    public static int[] splitTime(String timeStr) {
        return splitTime(timeFormat(timeStr));
    }

    /**
     * 日期格式转换 : long(毫秒) -> int[]{year,month,day,hour,minute,second}
     */
    public static int[] splitTime(long pTime) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date(pTime));
        int second = calendar.get(Calendar.SECOND);
        int minute = calendar.get(Calendar.MINUTE);
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int month = calendar.get(Calendar.MONTH) + 1;
        int year = calendar.get(Calendar.YEAR);
        return new int[]{year, month, day, hour, minute, second};
    }

    /**
     * 两个日期的实际差距 -> 包括相差的年月日时分秒
     * 两个参数不分先后,总是时间大的-时间小的
     *
     * @return int[]{year,month,day,hour,minute,second}
     */
    public static int[] gapSplitTime(String timeStr1, String timeStr2) {
        return gapSplitTime(timeFormat(timeStr1), timeFormat(timeStr2));
    }

    /**
     * 两个日期的实际差距 -> 包括相差的年月日时分秒
     * 两个参数不分先后,总是时间大的-时间小的
     *
     * @return int[]{year,month,day,hour,minute,second}
     */
    public static int[] gapSplitTime(long pTime1, long pTime2) {
        int[] time = splitTime(pTime1);
        int[] time2 = splitTime(pTime2);
        int year = time[0] - time2[0];
        int month = time[1] - time2[1];
        int day = time[2] - time2[2];
        int hour = time[3] - time2[3];
        int minute = time[4] - time2[4];
        int second = time[5] - time2[5];
        if (second < 0) {
            second = 60 - Math.abs(second);
            minute -= 1;
        }
        if (minute < 0) {
            minute = 60 - Math.abs(minute);
            hour -= 1;
        }
        if (hour < 0) {
            hour = 24 - Math.abs(hour);
            day -= 1;
        }
        if (day < 0) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.YEAR, time2[0]);
            calendar.set(Calendar.MONTH, time2[1] - 1);
            int monthDay = calendar.getActualMaximum(Calendar.DATE);
            day = monthDay - Math.abs(day);
            month -= 1;
        }
        if (month < 0) {
            month = 12 - Math.abs(month);
            year -= 1;
        }
        if (year < 0) {
            return gapSplitTime(pTime2, pTime1);
        }
        return new int[]{year, month, day, hour, minute, second};
    }

    /**
     * 两个日期的差距时间
     * 两个参数不分先后,总是时间大的-时间小的
     * 1年前/2月前/3天前/4小时前/5分钟前/刚刚
     */
    public static String gapTimeStr(String timeStr1, String timeStr2) {
        return gapTimeStr(timeFormat(timeStr1), timeFormat(timeStr2));
    }

    /**
     * 两个日期的差距时间
     * 两个参数不分先后,总是时间大的-时间小的
     * 1年前/2月前/3天前/4小时前/5分钟前/刚刚
     */
    public static String gapTimeStr(long pTime1, long pTime2) {
        StringBuilder sb = new StringBuilder();
        int[] time = gapSplitTime(pTime1, pTime2);
        int year = time[0];
        int month = time[1];
        int day = time[2];
        int hour = time[3];
        int minute = time[4];
        int second = time[5];
        if (year > 0) {
            sb.append(year + "年前");
        } else if (month > 0) {
            sb.append(month + "月前");
        } else if (day > 0) {
            sb.append(day + "天前");
        } else if (hour > 0) {
            sb.append(hour + "小时前");
        } else if (minute > 0) {
            sb.append(minute + "分钟前");
        } else if (second > 0) {
            sb.append("刚刚");
        }
        return sb.toString();
    }

    /**
     * 判断是否润年
     */
    public static boolean isLeapYear(Date date) {
        return isLeapYear(date.getTime());
    }

    public static boolean isLeapYear(String timeStr) {
        return isLeapYear(timeFormat(timeStr, yMdHms));
    }

    public static boolean isLeapYear(long date) {
        return isLeapYear(Integer.parseInt(dateFormat(date, DateUtils.yyyy)));
    }

    public static boolean isLeapYear(int year) {
        if ((year % 400) == 0) {
            return true;
        } else if ((year % 100) != 0 && (year % 4) == 0) {
            return true;
        }
        return false;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值