一. 介绍

  有时我们需要把某个时间范围进行时间段的切分,故此记录实现方式,欢迎大神点评帮忙优化和精简!

二. Java实现源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package com.vanbrother.p2p.service.common.utils.hessian;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
* <pre>
_
\"-._ _.--"~~"--._
\ " ^. ___
/ \.-~_.-~
.-----' /\/"\ /~-._ /
/ __ _/\-.__\L_.-/\ "-.
/.-" \ ( ` \_o>"<o_/ \ .--._\
/' \ \: " :/_/ "`
/ /\ "\ ~ /~"
\ I \/]"-._ _.-"[
___ \|___/ ./ l \___ ___
.--v~ "v` ( `-.__ __.-' ) ~v" ~v--.
.-{ | : \_ "~" _/ : | }-.
/ \ | ~-.,___,.-~ | / \
] \ | | / [
/\ \| : : |/ /\
/ ^._ _K.___,^ ^.___,K_ _.^ \
/ / "~/ "\ /" \~" \ \
/ / / \ _ : _ / \ \ \
.^--./ / Y___________l___________Y \ \.--^.
[ \ / | [/ ] | \ / ]
| "v" l________[____/]________j -Row }r" /
}------t / \ /`-. /
| | Y Y / "-._/
}-----v' | : | 7-. /
| |_| | l | / . "-._/
l .[_] : \ : r[]/_. /
\_____] "--. "-.____/
"Dragonball Z"
---Row
* </pre>
* DateUtils
* -- 日期工具类
*
* @author lmay.Zhou
* @date 2018/8/30 20:53 星期四
* @qq 379839355
* @email lmay@lmaye.com
*/
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;
}
}

最后更新: 2021年04月01日 11:03

原始链接: https://www.lmaye.com/2018/08/30/20180830210716/

× 多少都行~
打赏二维码