java日期 DateUtils工具类(全)持续更新

文章目录

前言

类中方法都亲测。欢迎留言。


DateUtils类

package com.example.jkytest.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class DateUtils {
    
    

    public static void main(String[] args) throws ParseException {
    
    
        /*//演示 findEveryDay
        List<String> dates = findEveryDay("2022-05-20 12:00", "2022-06-17 15:00:30");
        System.out.println("时间==" + dates);

        //演示 getDaysOfMonth
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        System.out.println(getDaysOfMonth(sdf.parse("2023-02")));

        //演示 getLastOneMonthDay
        System.out.println(getLastOneMonthDay());
        //演示 getNowOneMonthDay
        System.out.println(getNowOneMonthDay());

        //演示 strToDateFormat
        System.out.println(strToDateFormat("20230218"));*/

        //演示 getByDay
        System.out.println(getByDay(-1, "yyyyMMdd"));
    }

    /**
     * 获取前N天日期
     * @param day 天数 例(-1为前一天)
     * @param simpleDateFormat 日期格式 例(yyyyMMdd)
     */
    public static String getByDay(int day, String simpleDateFormat) {
    
    
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, day);
        SimpleDateFormat format = new SimpleDateFormat(simpleDateFormat);
        return format.format(calendar.getTime());

    }

    /**
     * 传入两个时间范围,返回这两个时间范围内的所有日期,并保存在一个集合中
     *
     * @param beginTime
     * @param endTime
     * @return
     * @throws ParseException
     */
    public static List<String> findEveryDay(String beginTime, String endTime)
            throws ParseException {
    
    
        //1.创建一个放所有日期的集合
        List<String> dates = new ArrayList();
        //2.创建时间解析对象规定解析格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        //3.将传入的时间解析成Date类型,相当于格式化
        Date dBegin = sdf.parse(beginTime);
        Date dEnd = sdf.parse(endTime);
        //4.将格式化后的第一天添加进集合
        dates.add(sdf.format(dBegin));
        //5.使用本地的时区和区域获取日历
        Calendar calBegin = Calendar.getInstance();
        //6.传入起始时间将此日历设置为起始日历
        calBegin.setTime(dBegin);
        //8.判断结束日期是否在起始日历的日期之后
        while (dEnd.after(calBegin.getTime())) {
    
    
            // 9.根据日历的规则:月份中的每一天,为起始日历加一天
            calBegin.add(Calendar.DAY_OF_MONTH, 1);
            //10.得到的每一天就添加进集合
            dates.add(sdf.format(calBegin.getTime()));
            //11.如果当前的起始日历超过结束日期后,就结束循环
        }
        return dates;
    }

    /**
     * 获取某个月的天数
     *
     * @param date
     * @return 天数
     */
    public static int getDaysOfMonth(Date date) {
    
    
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    }

    /**
     * 获取上个月第一天和上个月最后一天
     */
    public static Map<String, String> getLastOneMonthDay() {
    
    
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Map<String, String> map = new HashMap<>();
        // 上月起始
        Calendar lastMonthFirstDateCal = Calendar.getInstance();
        lastMonthFirstDateCal.add(Calendar.MONTH, -1);
        lastMonthFirstDateCal.set(Calendar.DAY_OF_MONTH, 1);
        String lastMonthFirstTime = format.format(lastMonthFirstDateCal.getTime());
        System.out.println("上月起始:" + lastMonthFirstTime);
        // 上月末尾
        Calendar lastMonthEndDateCal = Calendar.getInstance();
        lastMonthEndDateCal.add(Calendar.MONTH, -1);
        lastMonthEndDateCal.set(
                Calendar.DAY_OF_MONTH, lastMonthEndDateCal.getActualMaximum(Calendar.DAY_OF_MONTH));
        String lastMonthEndTime = format.format(lastMonthEndDateCal.getTime());
        System.out.println("上月末尾:" + lastMonthEndTime);
        map.put("beginDate", lastMonthFirstTime);
        map.put("endDate", lastMonthEndTime);
        return map;
    }

    /**
     * 获取当月第一天和上个月最后一天
     */
    public static Map<String, String> getNowOneMonthDay() {
    
    
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Map<String, String> map = new HashMap<>();
        // 本月起始
        Calendar thisMonthFirstDateCal = Calendar.getInstance();
        thisMonthFirstDateCal.set(Calendar.DAY_OF_MONTH, 1);
        String thisMonthFirstTime = format.format(thisMonthFirstDateCal.getTime());
        System.out.println("本月起始:" + thisMonthFirstTime);
        // 本月末尾
        Calendar thisMonthEndDateCal = Calendar.getInstance();
        thisMonthEndDateCal.set(
                Calendar.DAY_OF_MONTH, thisMonthEndDateCal.getActualMaximum(Calendar.DAY_OF_MONTH));
        String thisMonthEndTime = format.format(thisMonthEndDateCal.getTime());
        System.out.println("本月末尾:" + thisMonthEndTime);

        map.put("beginDate", thisMonthFirstTime);
        map.put("endDate", thisMonthEndTime);
        return map;
    }


    /**
     *将字符串格式yyyyMMdd的字符串转为日期,格式"yyyy-MM-dd"
     *
     * @param date 日期字符串
     * @return 返回格式化的日期
     * @throws ParseException 分析时意外地出现了错误异常
     */
    public static String strToDateFormat(String date) throws ParseException {
    
    
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
        formatter.setLenient(false);
        Date newDate= formatter.parse(date);
        formatter = new SimpleDateFormat("yyyy-MM-dd");
        return formatter.format(newDate);
    }

}



总结

如果此篇文章有帮助到您, 希望打大佬们能关注点赞收藏评论支持一波,非常感谢大家!
如果有不对的地方请指正!!!

猜你喜欢

转载自blog.csdn.net/weixin_42326851/article/details/129103064