日期时间工具类 DateUtils

本文详细探讨了Java中的DateUtils工具类,包括其常用方法如解析、格式化日期,以及与其他日期时间API的交互,帮助开发者更高效地处理日期时间操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import org.springframework.util.StringUtils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class DateUtil {
    public static final SimpleDateFormat TIME_FORMAT =
            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static final SimpleDateFormat DATE_FORMAT =
            new SimpleDateFormat("yyyy-MM-dd");
    public static final SimpleDateFormat DATEKEY_FORMAT =
            new SimpleDateFormat("yyyyMMdd");
    public static final SimpleDateFormat DATE_MINUTE_FORMAT =
            new SimpleDateFormat("yyyy-MM-dd_HHmm");

    /**
     * 判断一个时间是否在另一个时间之前
     * @param time1 第一个时间
     * @param time2 第二个时间
     * @return 判断结果
     */
    public static boolean before(String time1, String time2) {
        try {
            Date dateTime1 = TIME_FORMAT.parse(time1);
            Date dateTime2 = TIME_FORMAT.parse(time2);

            if(dateTime1.before(dateTime2)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判断一个时间是否在另一个时间之后
     * @param time1 第一个时间
     * @param time2 第二个时间
     * @return 判断结果
     */
    public static boolean after(String time1, String time2) {
        try {
            Date dateTime1 = TIME_FORMAT.parse(time1);
            Date dateTime2 = TIME_FORMAT.parse(time2);

            if(dateTime1.after(dateTime2)) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 计算时间差值(单位为秒)
     * @param time1 时间1
     * @param time2 时间2
     * @return 差值
     */
    public static int minus(String time1, String time2) {
        try {
            Date datetime1 = TIME_FORMAT.parse(time1);
            Date datetime2 = TIME_FORMAT.parse(time2);

            long millisecond = datetime1.getTime() - datetime2.getTime();

            return Integer.valueOf(String.valueOf(millisecond / 1000));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 获取年月日和小时
     * @param datetime 时间(yyyy-MM-dd HH:mm:ss)
     * @return 结果(yyyy-MM-dd_HH)
     */
    public static String getDateHour(String datetime) {
        String date = datetime.split(" ")[0];
        String hourMinuteSecond = datetime.split(" ")[1];
        String hour = hourMinuteSecond.split(":")[0];
        return date + "_" + hour;
    }

    /**
     * 获取当天日期(yyyy-MM-dd)
     * @return 当天日期
     */
    public static String getTodayDate() {
        return DATE_FORMAT.format(new Date());
    }

    /**
     * 获取昨天的日期(yyyy-MM-dd)
     * @return 昨天的日期
     */
    public static String getYesterdayDate() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.add(Calendar.DAY_OF_YEAR, -1);
        Date date = cal.getTime();
        return DATE_FORMAT.format(date);
    }

    /**
     * 格式化日期(yyyy-MM-dd)
     * @param date Date对象
     * @return 格式化后的日期
     */
    public static String formatDate(Date date) {
        return DATE_FORMAT.format(date);
    }

    /**
     * 格式化日期(yyyy-MM-dd)
     * @param timestamp 时间戳
     * @return 格式化后的日期
     */
    public static String formatDate(long timestamp) {
        return DATE_FORMAT.format(new Date(timestamp));
    }

    /**
     * 格式化时间(yyyy-MM-dd HH:mm:ss)
     * @param date Date对象
     * @return 格式化后的时间
     */
    public static String formatTime(Date date) {
        return TIME_FORMAT.format(date);
    }

    /**
     * 解析时间字符串
     * @param time 时间字符串 
     * @return Date
     */
    public static Date parseTime(String time) {
        try {
            return TIME_FORMAT.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        } /*finally {
			System.out.println("time====> " + time);
		}*/
        return null;
    }

    /**
     * 格式化日期key
     * @param date
     * @return
     */
    public static String formatDateKey(Date date) {
        return DATEKEY_FORMAT.format(date);
    }

    /**
     * 格式化日期key
     * @param datekey
     * @return
     */
    public static Date parseDateKey(String datekey) {
        try {
            return DATEKEY_FORMAT.parse(datekey);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 格式化时间,保留到分钟级别
     * yyyyMMddHHmm
     * @param date
     * @return
     */
    public static String formatTimeMinute(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
        return sdf.format(date);
    }

    /**
     * 格式化时间,保留到分钟级别
     * yyyy-MM-dd_HHmm
     * @param timestamp
     * @return
     */
    public static String formatTimeMinute(long timestamp) {
        return DATE_MINUTE_FORMAT.format(new Date(timestamp));
    }
    
    /**
     * 获取当天的0点时间
     */
    public static Date getTodayStartTime() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        return cal.getTime();
    }

    /**
     * 格式化日期,返回符合格式的字符串
     *
     * @param date
     * @param formater 如:yyyy-MM-dd HH:mm:ss 24小时制 年月日时分秒
     * @return
     */
    private static String getDateStrCompact(Date date, String formater) {
        if (date == null) {
            return "";
        }
        SimpleDateFormat format = new SimpleDateFormat(formater);
        String str = format.format(date);
        return str;
    }

    /**
     * 格式化日期,返回符合格式的字符串
     *
     * @param date
     * @param formatStr 默认 yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static String dateToString(Date date, String formatStr) {
        if (formatStr == null || "".equals(formatStr.trim())) {
            formatStr = "yyyy-MM-dd HH:mm:ss";
        }
        return getDateStrCompact(date, formatStr);
    }

    /**
     * 格式化日期字符串,返回符合格式的date
     *
     * @param dateStr
     * @param formater 如:yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static Date StringToDate(String dateStr, String formater) {
        Date date = null;
        if (formater == null || "".equals(formater.trim())) {
            formater = "yyyy-MM-dd HH:mm:ss";
        }
        SimpleDateFormat format = new SimpleDateFormat(formater);
        if (!StringUtils.hasText(dateStr)) {
            return date;
        }
        try {
            date = format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 将日期增减 n 天
     *
     * @param date 参照日期,如果为null则取当前日期
     * @param days 增减的天数 (为正数则增加,为负数则减少)
     * @return Date
     */
    public static Date addDate(Date date, int days) {

        return addDate(date, days, Calendar.DATE);
    }

    /**
     * 取某一日期增减 n 值后的日期, n 由 dateField 决定是年、月、日 根据增加or减少的时间得到新的日期
     *
     * @param date      参照日期
     * @param counts    增减的数值
     * @param dateField int 需操作的日期字段, 取值范围如下 Calendar.YEAY 年 Calendar.MONTH 月
     *                  Calendar.DATE 日 .... Calendar.SECOND 秒
     * @return Date
     */
    public static Date addDate(Date date, int counts, int dateField) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(dateField, counts);
        return calendar.getTime();
    }

    public static long getTimeInMillis(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.getTimeInMillis();
    }

    /**
     * 当前时间多少分钟之后的时间
     *
     * @param min
     * @return
     */
    public static Date getCurrentAfterTime(Date date, int min) {
        if (date == null) {
            date = new Date();
        }
        long current = getTimeInMillis(date);
        current += min * 60 * 1000;
        Date da = new Date(current);
        return da;
    }

    public static String getCurrentAfterTimeStr(Date date, int min) {
        Date da = getCurrentAfterTime(date, min);
        return dateToString(da, null);
    }


    //GMT时间转换本地标准格式时间
    public static String GMTToDateStr(String gmtStr) {
        SimpleDateFormat format = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT'", Locale.US);
        format.setTimeZone(TimeZone.getTimeZone("GMT"));
        Date date = null;
        try {
            date = format.parse(gmtStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return format2.format(date);
    }

    public static Date GMTToDate(String gmtStr) {
        SimpleDateFormat format = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT'", Locale.US);
        format.setTimeZone(TimeZone.getTimeZone("GMT"));
        Date date = null;
        try {
            date = format.parse(gmtStr);
            SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String dateStr = format2.format(date);
            return format2.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 获取当月第一天
     *
     * @return
     */
    public static String getFirstDay() {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        Date theDate = calendar.getTime();

        GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
        gcLast.setTime(theDate);
        gcLast.set(Calendar.DAY_OF_MONTH, 1);
        String day_first = df.format(gcLast.getTime());
        StringBuffer str = new StringBuffer().append(day_first);
        return str.toString();

    }

    /**
     * 当月最后一天
     *
     * @return
     */
    public static String getLastDay() {
        // 获取Calendar
        Calendar calendar = Calendar.getInstance();
        // 设置日期为本月最大日期
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
        // 打印
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String s = format.format(calendar.getTime());
        StringBuffer str = new StringBuffer().append(s);
        return str.toString();
    }

    /**
     * Unix时间戳转换成指定格式日期
     *
     * @param timeStamp
     * @param formater
     * @return
     */
    public static String transUnixTimeStamp2Date(String timeStamp, String formater) {
        Long timestamp = Long.parseLong(timeStamp) * 1000;
        if (formater == null) {
            formater = "yyyy-MM-dd HH:mm:ss";
        }
        String date = new SimpleDateFormat(formater, Locale.CHINA).format(new Date(timestamp));
        return date;

    }

    /**
     * 获取年月日时间字符串
     *
     * @param time
     * @return
     */
    public static String getDateByTimeMillis(Long time) {
        Date date = new Date(time);
        String data = DateUtil.dateToString(date, "yyyy-MM-dd");
        return data;
    }

    /**
     * 获取年月日时间字符串
     *
     * @param time
     * @return
     */
    public static String getDateByTimeMilli(Long time) {
        Date date = new Date(time);
        String data = DateUtil.dateToString(date, "mm:ss");

        return data;
    }

    public static String getYesterdayStart() {
        Date date = new Date();//取时间
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, -1);
        date = calendar.getTime();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(date) + " 00:00:00";
        return dateString;
    }

    /**
     * 获取当前系统的时间戳
     *
     * @return
     */
    public static String getUnixTimestamp() {
        long time = System.currentTimeMillis();
        String nowTimeStamp = String.valueOf(time / 1000);
        return nowTimeStamp;
    }

    /**
     * 课次时间差
     */
    public static String getSectTime(String SectBegin, String SectEnd) {
        Date date1 = DateUtil.StringToDate(SectBegin, "yyyy-MM-dd HH:mm:ss");
        Date date2 = DateUtil.StringToDate(SectEnd, "yyyy-MM-dd HH:mm:ss");
        Long a = (date2.getTime() - date1.getTime()) / (1000 * 60 * 60);
        String str = String.valueOf(a);
        return str.toString();
    }

    public static String getBeforeFirstDay(Date date) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
        gcLast.setTime(date);
        gcLast.set(Calendar.DAY_OF_MONTH, 1);
        String day_first = df.format(gcLast.getTime());
        StringBuffer str = new StringBuffer().append(day_first);
        return str.toString();
    }

    /**
     * 当月最后一天
     *
     * @return
     */
    public static String getAfterLastDay(Date date) {
        // 获取Calendar
        Calendar calendar = Calendar.getInstance();
        // 设置日期为本月最大日期
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
        // 打印
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String s = format.format(calendar.getTime());
        StringBuffer str = new StringBuffer().append(s);
        return str.toString();
    }

    /**
     * @param months
     * @return
     */
    public static String getBeforeTime(int months) {
        Date dNow = StringToDate(getBeforeFirstDay(new Date()), "yyyy-MM-dd");   //当前时间
        Calendar calendar = Calendar.getInstance(); //得到日历
        calendar.setTime(dNow);//把当前时间赋给日历
        calendar.add(calendar.MONTH, months);  //设置为前几月的时间
        String str = dateToString(calendar.getTime(), "yyyy-MM-dd"); //格式化并返回
        return str.toString();
    }

    /**
     * 几月后的日期,
     *
     * @param months
     * @return
     */
    public static String getAfterTime(int months) {
        Date dNow = StringToDate(getAfterLastDay(new Date()), "yyyy-MM-dd");   //当前时间
        Calendar calendar = Calendar.getInstance(); //得到日历
        calendar.setTime(dNow);//把当前时间赋给日历
        calendar.add(calendar.MONTH, months);  //设置为前几月的时间
        String str = dateToString(calendar.getTime(), "yyyy-MM-dd"); //格式化并返回
        return str.toString();
    }

    public static void main(String[] args) {
        System.out.println(getTodayStartTime());

        Date d = addDate(new Date(), -5, Calendar.MONTH);
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        //Calendar calendar = Calendar.getInstance();
        Date theDate = d;

        GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance();
        gcLast.setTime(theDate);
        gcLast.set(Calendar.DAY_OF_MONTH, 1);
        String day_first = df.format(gcLast.getTime());
        StringBuffer str = new StringBuffer().append(day_first);


        Calendar calendar = Calendar.getInstance();
        // 设置日期为本月最大日期
        calendar.setTime(d);
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
        // 打印
        DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String s = format.format(calendar.getTime());
        System.out.println(str + ":::" + s);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值