菜鸟笔记
提升您的技术认知

JAVA时间常用操作工具类

小刘整理了JAVA中对时间的常用操作,封装了几种方法,简单方便,开箱即用。时间转字符串格式,字符串转时间,以及过去和未来的日期。除此之外,还新增了时间戳之差计算时分秒天的具体方案。

    public static void main(String[] args) {
        System.out.println("过去七天的日期:"+pastDate(7,Calendar.DAY_OF_YEAR,"yyyy-MM-dd"));
        System.out.println("过去一年的日期:"+pastDate(1,Calendar.YEAR,"yyyy-MM-dd"));
        Date date = new Date();
        System.out.println("时间戳转日期:"+timestampToDate(date.getTime()));
        String str = dateToStr(date, "yyyy-MM-dd HH:mm:ss");
        System.out.println("日期转字符串日期;"+str);
        System.out.println("字符串日期转日期"+strToDate(str,"yyyy-MM-dd HH:mm:ss"));

        System.out.println("校验是否是时间:"+validDate("2023-23.32"));
     }

    public static void main(String[] args) {
        String s="2023-11-20 15:10:00";
        Date start = strToDate(s, "yyyy-MM-dd HH:mm:ss");
        String end="2023-11-20 15:20:30";
        Date endT = strToDate(end, "yyyy-MM-dd HH:mm:ss");
        String aLong = durationTime(start,endT);
        System.out.println(s);
        System.out.println(end);
        System.out.println(aLong);
    }

/**获取过去日期 之后【】->+
     * 年月日时分秒:yyyy-MM-dd HH:mm:ss
     * 年月日:yyyy-MM-dd
     * @param past 过去几个
     * @param unit 单位  DAY_OF_YEAR【天】WEEK_OF_YEAR【周】 MONTH【月】
     * @param pattern
     * @return
     */
    public static String pastDate(Integer past,Integer unit,String pattern) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(unit, calendar.get(unit) - past);
        Date today = calendar.getTime();
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        String result = format.format(today);
        return result;
    }




    /**
     * 时间戳转换为时间
     * 10位为秒级时间戳
     * 13位为毫秒级时间戳
     * @param time
     * @return
     */
    public static Date timestampToDate(Long time){
        Date date = new Date(time.toString().length() > 10 ? time : time * 1000L);
        return date;
    }

    /**
     * 获取时间格式化
     * 年月日时分秒:yyyy-MM-dd HH:mm:ss
     * 年月日:yyyy-MM-dd
     * @param date
     * @param pattern
     * @return
     */
    public static String dateToStr(Date date,String pattern) {
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        return format.format(date);
    }

    /**
     * 字符串时间转时间
     * 年月日时分秒:yyyy-MM-dd HH:mm:ss
     * 年月日:yyyy-MM-dd
     * @param time
     * @param pattern
     * @return
     */
    public static Date strToDate(String time,String pattern){
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        try {
            Date date = sdf.parse(time);
            return date;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }



    /**
     * 校验时间是否是日期格式的字符串
     * @param str
     */
    public static boolean validDate(String str) {
        boolean time = true;
        boolean date = true;
        // 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
        SimpleDateFormat formatDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd");
        try {
            formatDateTime.parse(str);
        } catch (ParseException e) {
            time = false;
        }
        try {
            formatDate.parse(str);
        } catch (ParseException e) {
            date = false;
        }
        if (!time && !date) {
            System.out.println("请输入正确的日期格式【yyyy-MM-dd/yyyy-MM-dd HH:mm:ss】");
        }
        return time || date;

    }

    /**
     * 时间间隔
     * 多少分钟between.toMinutes();
     * 多少天between.toDays();
     * 多少秒between.getSeconds();
     * 多少分钟多少秒
     * @param startTime
     * @param endTime
     * @return
     */
    public static String durationTime(Date startTime, Date endTime) {
        LocalDateTime start = LocalDateTime.ofInstant(Optional.ofNullable(startTime).orElse(new Date()).toInstant(), ZoneId.systemDefault());
        LocalDateTime end = LocalDateTime.ofInstant(Optional.ofNullable(endTime).orElse(new Date()).toInstant(), ZoneId.systemDefault());
        Duration between = Duration.between(start, end);
        between.getSeconds();
        String msg=between.toMinutes()+"分钟"+(between.getSeconds()-between.toMinutes()*60)+"秒";
        return msg;
    }

 
 

结尾

时间不一定能证明很多东西,但一定会让你看透很多东西。一眼就能看得到头,不是我们想要的生活,我们为之努力,是努力让自己的生活多一种可能,给自己的未来多一份惊喜。