JAVA 之日期通用工具类(日期格式,获取当天开始结束时间,当前年月日,本年第几周等等等)

代码可以借鉴,转发请标明出处,不可直接盗用发表。

很多新手可能会遇到开发中需要去各种方式的调用时间,为了方便大家,我直接把写好的时间Util提供大家参考,有不当之处不吝赐教。

​

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

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

// 日期工具类
public class DateUtil {
    // 年
    public static String DATE_YYYY = "yyyy";
    // 年月日 
    public static String DATE_YYYYMMDD = "yyyyMMdd"; 
    // 格式化年月日
    public static String DATE_YYYY_MM_DD = "yyyy-MM-dd";
     // 年月日时分秒 
    public static String DATE_YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
    // 年月日时分秒毫秒
    public static String DATE_YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS"; 
    // 格式化年月日时分秒
    public static String DATE_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; 
    // 格式化年月日时分秒毫秒
    public static String DATE_YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd HH:mm:ss.SSS";
    // 格式化年月日时分 
    public static String DATE_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm"; 

    public static SimpleDateFormat sdf = new SimpleDateFormat();

    public static Calendar calendar = Calendar.getInstance();

    
    // 日期格式
    public static SimpleDateFormat getSimpleDateFormat(String dateForm) {
        sdf.applyPattern(dateForm);
        return sdf;
    }

 
    //  获取指定格式的日期
    public static String getDate(String pattern) {
        return DateFormatUtils.format(Calendar.getInstance().getTime(), pattern);
    }

  
    // 时间字符转日期
    public static Date strToDate(String date) {
        try {
            if (StringUtils.isNotEmpty(date)) {
                if (date.contains(":")) {
                    return DateForm(DateUtil.DATE_YYYY_MM_DD_HH_MM_SS, date);
                } else {
                    return DateForm(DateUtil.DATE_YYYY_MM_DD, date);
                }
            } else {
                return null;
            }
        } catch (ParseException e) {
            return null;
        }
    }

    // 根据时间字符串和时间格式 转化时间
    public static Date DateForm(String form, String date) throws ParseException {
        return getSimpleDateFormat(form).parse(date);
    }

   // 根据时间格式获取当前时间
    public static Date getCurrentDate(SimpleDateFormat sdf) throws ParseException {
        String date = getCurrentDateStr(sdf);
        return sdf.parse(date);
    }

    // 根据时间格式返回当前时间的字符串格式
    public static String getCurrentDateStr(SimpleDateFormat sdf) {
        return sdf.format(new Date());
    }

    // 格式化指定格式的 LocalDateTime
    public static String formLocalDateTime(LocalDateTime ldt, String dateForm) {
        DateTimeFormatter dtfm = DateTimeFormatter.ofPattern(dateForm);
        return dtfm.format(ldt);
    }

   //  根据字符日期转 LocalDateTime
    public static LocalDateTime formLocalDateTime(String date, String dateForm) {
        DateTimeFormatter dtfm = DateTimeFormatter.ofPattern(dateForm);
        return LocalDateTime.parse(date, dtfm);
    }

    
    public static Long getMilliSecond(LocalDateTime ldt) {
        return ldt.toInstant(ZoneOffset.of("+8")).toEpochMilli();
    }

   // 获取秒
    public static Long getSecond(LocalDateTime ldt) {
        return ldt.toEpochSecond(ZoneOffset.of("+8"));
    }

   // 给定日期计算多少天后的日期
    public static Date computeDate(Date date, int days) {
        Lock lock = new ReentrantLock();
        lock.lock();
        try {
            calendar.setTime(date);
            calendar.add(Calendar.DATE, days);
            return calendar.getTime();
        } finally {
            lock.unlock();
        }
    }

   //  LocalDateTime 转 Date
    public static Date ldtToDate(LocalDateTime ldt) {
        return Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
    }

    //获取当前默认的字符日期
    public static String current() {
        return getCurrentDateStr(getSimpleDateFormat(DateUtil.DATE_YYYYMMDDHHMMSS));
    }

    public static Date parseShortDate(String p_date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        try {
            return sdf.parse(p_date);
        } catch (Exception var3) {
            return null;
        }
    }

    public static Date parseLongDate(String p_date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        try {
            return sdf.parse(p_date);
        } catch (Exception var3) {
            return null;
        }
    }

    public static String formatLongDate(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }

    public static String formatLongTimestamp(Timestamp timeStamp) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date(timeStamp.getTime());
        return sdf.format(date);
    }

    public static String formatShortTime(Date date) {
        if (date == null) {
            return "";
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(date);
    }

  
    public static Date DateformatShortDateTime(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD);
        String a = sdf.format(date);
        try {
            return sdf.parse(a);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

   // date转string 年月日 时分秒
    public static String formatTime(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD_HH_MM_SS);
        return sdf.format(date);
    }

    /**
     * 获取当前日期的下周一到下周日的所有日期集合
     *
     * @return
     */
    public static List getNextWeekDateList() {
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();

        cal1.setTime(new Date());
        // 将时分秒,毫秒域清零
        cal1.set(Calendar.HOUR_OF_DAY, 0);
        cal1.set(Calendar.MINUTE, 0);
        cal1.set(Calendar.SECOND, 0);
        cal1.set(Calendar.MILLISECOND, 0);

        cal2.setTime(new Date());
        // 将时分秒,毫秒域清零
        cal2.set(Calendar.HOUR_OF_DAY, 0);
        cal2.set(Calendar.MINUTE, 0);
        cal2.set(Calendar.SECOND, 0);
        cal2.set(Calendar.MILLISECOND, 0);
        // 获得当前日期是一个星期的第几天
        int dayWeek = cal1.get(Calendar.DAY_OF_WEEK);

        if (dayWeek == 1) {
            cal1.add(Calendar.DAY_OF_MONTH, 1);
            cal2.add(Calendar.DAY_OF_MONTH, 7);
        } else {
            cal1.add(Calendar.DAY_OF_MONTH, 1 - dayWeek + 8);
            cal2.add(Calendar.DAY_OF_MONTH, 1 - dayWeek + 14);
        }
        Calendar cStart = Calendar.getInstance();
        cStart.setTime(cal1.getTime());

        List dateList = new ArrayList();
        //别忘了,把起始日期加上
        dateList.add(cal1.getTime());
        // 此日期是否在指定日期之后
        while (cal2.getTime().after(cStart.getTime())) {
            // 根据日历的规则,为给定的日历字段添加或减去指定的时间量
            cStart.add(Calendar.DAY_OF_MONTH, 1);
            dateList.add(cStart.getTime());
        }

        //设置周末的时分秒为23:59:59:999
        Date oldSunday = (Date) dateList.get(6);
        Calendar cal3 = Calendar.getInstance();
        cal3.setTime(oldSunday);
        // 将时分秒,毫秒域清零
        cal3.set(Calendar.HOUR_OF_DAY, 23);
        cal3.set(Calendar.MINUTE, 59);
        cal3.set(Calendar.SECOND, 59);
        cal3.set(Calendar.MILLISECOND, 999);
        Date newSunday = cal3.getTime();
        dateList.add(newSunday);
        return dateList;
    }

   // 获取当天开始时间
    public static Date getDayStartTime() {
        Calendar start = Calendar.getInstance();
        start.set(Calendar.HOUR_OF_DAY, 00);
        start.set(Calendar.MINUTE, 0);
        start.set(Calendar.SECOND, 0);
        SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return DateUtil.strToDate(sm.format(start.getTime()));
    }

    // 获取当天结束时间
    public static Date getDayEndTime() {
        Calendar end = Calendar.getInstance();
        end.set(Calendar.HOUR_OF_DAY, 23);
        end.set(Calendar.MINUTE, 59);
        end.set(Calendar.SECOND, 59);
        SimpleDateFormat sm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return DateUtil.strToDate(sm.format(end.getTime()));
    }

   // 时间字符转日期, 年月日 时分
    public static Date strToDateNoSecond(String date) {
        try {
            if (StringUtils.isNotEmpty(date)) {
                return DateForm(DateUtil.DATE_YYYY_MM_DD_HH_MM, date);
            } else {
                return null;
            }
        } catch (ParseException e) {
            return null;
        }
    }

    // 获取指定开始时间至结束时间的天数集合
    public static List<String> getDateList(String beginDate, String endDate) {
        List<String> dateList = new ArrayList<>();
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD);
            Calendar cal = Calendar.getInstance();
            cal.setTime(sdf.parse(beginDate));
            for (long d = cal.getTimeInMillis(); d <= sdf.parse(endDate).getTime(); d = getNextDay(cal)) {
                dateList.add(sdf.format(d));
            }
        } catch (ParseException e) {
            return dateList;
        }

        return dateList;
    }

    private static long getNextDay(Calendar c) {
        c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1);
        return c.getTimeInMillis();
    }

    // 获得当前时间是今年的第几周
    public static int getWhatWeekByCurrentTime(Date date) {
        //获取一个Calendar对象
        Calendar calendar = Calendar.getInstance();
        //设置星期一为一周开始的第一天
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        //设置在一年中第一个星期所需最少天数
        calendar.setMinimalDaysInFirstWeek(4);
        calendar.setTime(date);
        return calendar.get(Calendar.WEEK_OF_YEAR);
    }

    // 获得当前时间的某年某月(例如2022年10月)
    public static String getYearAndMonth(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("YYYY年MM月");
        return sdf.format(date);
    }

   // 获得当前时间的某年(例如2022年)
    public static String getYear(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("YYYY");
        return sdf.format(date);
    }


    // 获得当前时间的月.日
    public static String getMonthAndDay(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("MM.dd");
        return sdf.format(date);
    }

    public static void main(String[] args) {
        //获取一个Calendar对象
        Calendar calendar = Calendar.getInstance();
        //设置星期一为一周开始的第一天
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        //设置在一年中第一个星期所需最少天数
        calendar.setMinimalDaysInFirstWeek(4);
        //格式化日期
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date parse = null;
        try {
            parse = simpleDateFormat.parse("2022-01-03");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        calendar.setTime(parse);
        int weekOfYear1 = calendar.get(Calendar.WEEK_OF_YEAR);
        System.out.println(weekOfYear1 + "周");
      
    }

    // 获得本周一与当前日期相差的天数
    public static int getMondayPlus() {
        Calendar cd = Calendar.getInstance();
        int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
        //由于Calendar提供的都是以星期日作为周一的开始时间
        if (dayOfWeek == 1) {
            return -6;
        } else {
            return 2 - dayOfWeek;
        }
    }

    // 获得当前周,周一的日期
    public static Date getCurrentMonday() {
        int mondayPlus = getMondayPlus();
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.add(GregorianCalendar.DATE, mondayPlus);
        Date monday = currentDate.getTime();
        return monday;
    }

    // 获得当前周,周日的日期
    public static Date getPreviousSunday() {
        int mondayPlus = getMondayPlus();
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.add(GregorianCalendar.DATE, mondayPlus + 6);
        Date monday = currentDate.getTime();
        return monday;
    }

    /**
     * 获取下周一时间
     */
    public static Date getNextWeekMonday() {
        int mondayPlus = getMondayPlus();
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.add(GregorianCalendar.DATE, mondayPlus + 7);
        Date monday = currentDate.getTime();
        return monday;
    }

    /**
     * 获取下周日时间
     */
    public static Date getNextWeekSunday() {
        int mondayPlus = getMondayPlus();
        GregorianCalendar currentDate = new GregorianCalendar();
        currentDate.add(GregorianCalendar.DATE, mondayPlus + 13);
        Date monday = currentDate.getTime();
        return monday;
    }

    /**
     * 获取本月初第一天时间
     * @param date
     * @return
     */
    public static Date getBeginDayOfMonth(Date date) {
        GregorianCalendar currentDate = (GregorianCalendar) Calendar.getInstance();
        currentDate.setTime(date);
        //设置为第一天
        currentDate.set(Calendar.DAY_OF_MONTH, 1);
        Date monthOne = currentDate.getTime();
        return monthOne;
    }

    /**
     * 获取本月的结束时间
     *
     * @return
     */
    public static Date getEndDayOfMonth() {
        //获取Calendar
        Calendar calendar = Calendar.getInstance();
        //设置日期为本月最大日期
        calendar.set(Calendar.DATE, calendar.getActualMaximum(calendar.DATE));
        return calendar.getTime();
    }

    /**
     * 获取String类型的年月日十分时间
     *
     * @return
     */
    public static String getStringFormateDate() {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD_HH_MM);
        String date = sdf.format(Calendar.getInstance().getTime());
        return date;
    }

    /**
     * 获取String类型日期
     *
     * @param time
     * @param pattern
     * @return
     */
    public static String getDateFormateToString(Date time, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(time);
    }

    /**
     * 两个日期的时长(hh小时mm分)
     *
     * @param time1
     * @param time2
     * @return
     */
    public static String getTwoTimeDuration(Date time1, Date time2) {
        StringBuffer durationsbf = new StringBuffer();
        //两时间相差多少秒
        long betweenSecond = (time1.getTime() - time2.getTime())/1000;
        //两时间相差的小时
        long hour=betweenSecond%(24*3600)/3600;
        //两时间相差的分
        long minute = betweenSecond%3600/60;
        return durationsbf.append(hour).append("小时").append(minute).append("分").toString();
    }


    /**
     * 获得当前时间的年月日
     *
     * @param date
     * @return
     */
    public static String getYearAndMonthAndDay(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_YYYY_MM_DD);
        return sdf.format(date);
    }

}

​

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值