Java将时间范围进行分隔(年-月-日)

简介: Java将时间范围进行分隔(年-月-日)
package com.example.xiaohe.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
 * @auther:Wangxl
 * @Emile:18335844494@163.com
 * @Time:2020/12/24 10:02
 */
public class DateUtils {

    /**
     * 日期正则表达式
     */
    public static String YEAR_REGEX = "^\\d{4}$";
    public static String MONTH_REGEX = "^\\d{4}(\\-|\\/|\\.)\\d{1,2}$";
    public static String DATE_REGEX = "^\\d{4}(\\-|\\/|\\.)\\d{1,2}\\1\\d{1,2}$";

    /**
     * 格式化日期
     * - yyyy-MM-dd HH:mm:ss
     *
     * @param date      日期
     * @param pattern   日期格式
     * @return          日期字符串
     */
    public static String format(Date date, String pattern) {
        SimpleDateFormat sd = new SimpleDateFormat(pattern);
        return sd.format(date);
    }

    /**
     * 格式化日期
     * - yyyy-MM-dd HH:mm:ss
     *
     * @param date              日期字符串
     * @param pattern           日期格式
     * @return                  日期
     * @throws ParseException   解析异常
     */
    public static Date parse(String date, String pattern) throws ParseException {
        SimpleDateFormat sd = new SimpleDateFormat(pattern);
        try {
            return sd.parse(date);
        } catch (ParseException e) {
            throw e;
        }
    }

    /**
     * 日期范围 - 切片
     * <pre>
     * -- eg:
     * 年 ----------------------- sliceUpDateRange("2018", "2020");
     * rs: [2018, 2019, 2020]
     *
     * 月 ----------------------- sliceUpDateRange("2018-06", "2018-08");
     * rs: [2018-06, 2018-07, 2018-08]
     *
     * 日 ----------------------- sliceUpDateRange("2018-06-30", "2018-07-02");
     * rs: [2018-06-30, 2018-07-01, 2018-07-02]
     * </pre>
     *
     * @param startDate 起始日期
     * @param endDate   结束日期
     * @return          切片日期
     */
    public static List<String> sliceUpDateRange(String startDate, String endDate) {
        List<String> rs = new ArrayList<>();
        try {
            int dt = Calendar.DATE;
            String pattern = "yyyy-MM-dd";
            if(startDate.matches(YEAR_REGEX)) {
                pattern = "yyyy";
                dt = Calendar.YEAR;
            } else if(startDate.matches(MONTH_REGEX)) {
                pattern = "yyyy-MM";
                dt = Calendar.MONTH;
            } else if(startDate.matches(DATE_REGEX)) {
                pattern = "yyyy-MM-dd";
                dt = Calendar.DATE;
            }
            Calendar sc = Calendar.getInstance();
            Calendar ec = Calendar.getInstance();
            sc.setTime(parse(startDate, pattern));
            ec.setTime(parse(endDate, pattern));
            while(sc.compareTo(ec) < 1){
                rs.add(format(sc.getTime(), pattern));
                sc.add(dt, 1);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return rs;
    }

    public static void main(String[] args) {
        List<String> strings = sliceUpDateRange("2020-11-29", "2020-12-12");
        for (String string : strings) {
            System.out.println(string);
        }
    }
}
相关文章
|
2月前
|
Java
java 8 数组转字符串并以逗号分隔
java 8 数组转字符串并以逗号分隔
14 0
|
12月前
|
算法 Java 索引
Java每日一练(20230509) 下一个排列、分隔链表、随机指针链表
Java每日一练(20230509) 下一个排列、分隔链表、随机指针链表
54 0
|
Java
java字符串拼接,逗号分隔 (已实测可用)
java字符串拼接,逗号分隔 (已实测可用)
293 0
|
Java
java判断当前时间是否在某个时间区间内(可精确到毫秒)
java判断当前时间是否在某个时间区间内(可精确到毫秒)
689 0
java判断当前时间是否在某个时间区间内(可精确到毫秒)
|
算法 搜索推荐 Java
线性时间选择(Top K)问题(Java)
线性时间选择(Top K)问题(Java)
201 0
线性时间选择(Top K)问题(Java)
|
Java
Java中格林尼治时间和时间戳的相互转换
Java中格林尼治时间和时间戳的相互转换
679 0
Java将CST的时间字符串转换成需要的日期格式字符串
Java将CST的时间字符串转换成需要的日期格式字符串
|
Java
java时间换算(BJU转UTC)
UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。
218 0
java时间换算(BJU转UTC)
JAVA 实现五种基本排序方法的实现以及时间的统计
JAVA 实现五种基本排序方法的实现以及时间的统计
java获取时间间隔,获取当天每隔15分钟的时间
Java开发中日常遇到的关于时间的问题
java获取时间间隔,获取当天每隔15分钟的时间