1 /**
2 * 日期工具类
3 *
4 * @author 东篱
5 * @date 2022-1-22
6 */
7 public class DateUtil {
8
9 /**
10 * 获取当前月开始时间
11 *
12 * @param date
13 */
14 public static Date beginOfMonth(Date date) {
15 Calendar calendar = getCalendar();
16 calendar.setTimeInMillis(date.getTime());
17 calendar.add(Calendar.YEAR, 0);
18 calendar.add(Calendar.MONTH, 0);
19 calendar.set(Calendar.DAY_OF_MONTH, 1);
20 calendar.set(Calendar.HOUR_OF_DAY, 0);
21 calendar.set(Calendar.MINUTE, 0);
22 calendar.set(Calendar.SECOND, 0);
23
24 long timeInMillis = calendar.getTimeInMillis();
25 return new Date(timeInMillis);
26 }
27
28 /**
29 * 获取当前月结束时间
30 *
31 * @param date
32 * @return
33 */
34 public static Date endOfMonth(Date date) {
35 Calendar calendar = getCalendar();
36 calendar.setTimeInMillis(date.getTime());
37 calendar.add(Calendar.YEAR, 0);
38 calendar.add(Calendar.MONTH, 0);
39 calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
40 calendar.set(Calendar.HOUR_OF_DAY, 23);
41 calendar.set(Calendar.MINUTE, 59);
42 calendar.set(Calendar.SECOND, 59);
43
44 long timeInMillis = calendar.getTimeInMillis();
45 return new Date(timeInMillis);
46 }
47
48 /**
49 * 根据年月日获取日期
50 *
51 * @param year
52 * @param month
53 * @param day
54 * @return
55 */
56 public static Date getDate(int year, int month, int day) {
57 return dateStrParse(year + SettleConst.LINE + month + SettleConst.LINE + day, SettleConst.DATE_FORMAT);
58 }
59
60 /**
61 * 根据年月日时分秒获取时间
62 *
63 * @param year
64 * @param month
65 * @param day
66 * @param time
67 * @return
68 */
69 public static Date getTime(int year, int month, int day, String time) {
70 return dateStrParse(year + SettleConst.LINE + month + SettleConst.LINE + day + SettleConst.BLANK + time, SettleConst.TIME_FORMAT);
71 }
72
73 /**
74 * 日期字符串转date
75 *
76 * @param str 日期字符串
77 * @param format 格式
78 * @return
79 */
80 public static Date dateStrParse(String str, String format) {
81 SimpleDateFormat sdf = new SimpleDateFormat(format);
82 Date parse = null;
83 try {
84 parse = sdf.parse(str);
85 } catch (Exception e) {
86 e.printStackTrace();
87 }
88 return parse;
89 }
90
91 /**
92 * 日期转字符串
93 *
94 * @param date
95 * @param format
96 * @return
97 */
98 public static String dateFormat(Date date, String format) {
99 SimpleDateFormat sdf = new SimpleDateFormat(format);
100 String str = "";
101 try {
102 if (date != null){
103 str = sdf.format(date);
104 }
105 } catch (Exception e) {
106 e.printStackTrace();
107 }
108 return str;
109 }
110
111 /**
112 * 获取当前日期前某天或后某天
113 *
114 * @param date
115 * @param days
116 * @return
117 */
118 public static Date offsetDate(Date date, int days) {
119 Calendar calendar = Calendar.getInstance();
120 calendar.setTime(date);
121 calendar.add(Calendar.DAY_OF_MONTH, days);
122 return calendar.getTime();
123 }
124
125 /**
126 * 获取当前日期月份
127 *
128 * @param date
129 * @return
130 */
131 public static Integer month(Date date) {
132 if (date == null) {
133 return -1;
134 }
135 Calendar calendar = Calendar.getInstance();
136 calendar.setTimeInMillis(date.getTime());
137 return calendar.get(Calendar.MONTH) + 1;
138 }
139
140 /**
141 * 获取当前日期是几号
142 *
143 * @param date
144 * @return
145 */
146 public static Integer day(Date date) {
147 Calendar calendar = Calendar.getInstance();
148 calendar.setTimeInMillis(date.getTime());
149 return calendar.get(Calendar.DATE);
150 }
151
152 /**
153 * 获取当前日期年份
154 *
155 * @param date
156 * @return
157 */
158 public static Integer year(Date date) {
159 Calendar calendar = Calendar.getInstance();
160 calendar.setTimeInMillis(date.getTime());
161 return calendar.get(Calendar.YEAR);
162 }
163
164 /**
165 * 获取当前季度开始时间
166 *
167 * @param date
168 * @return
169 */
170 public static Date beginOfQuart(Date date) {
171 Integer month = month(date);
172 Integer quartStartMonth = 1;
173
174 if (month >= 4 && month <= 6) {
175 quartStartMonth = 4;
176 } else if (month >= 7 && month <= 9) {
177 quartStartMonth = 7;
178 } else if (month >= 10 && month <= 12) {
179 quartStartMonth = 10;
180 }
181
182 Calendar calendar = getCalendar();
183 calendar.setTimeInMillis(date.getTime());
184 calendar.add(Calendar.YEAR, 0);
185 calendar.set(Calendar.MONTH, quartStartMonth - 1);
186 calendar.set(Calendar.DAY_OF_MONTH, 1);
187 calendar.set(Calendar.HOUR_OF_DAY, 0);
188 calendar.set(Calendar.MINUTE, 0);
189 calendar.set(Calendar.SECOND, 0);
190
191 return new Date(calendar.getTimeInMillis());
192 }
193
194 /**
195 * 获取当前季度结束时间
196 *
197 * @param date
198 * @return
199 */
200 public static Date endOfQuart(Date date) {
201 Integer month = month(date);
202 Integer quartStartMonth = 3;
203
204 if (month >= 4 && month <= 6) {
205 quartStartMonth = 6;
206 } else if (month >= 7 && month <= 9) {
207 quartStartMonth = 9;
208 } else if (month >= 10 && month <= 12) {
209 quartStartMonth = 12;
210 }
211
212 Calendar calendar = getCalendar();
213 calendar.setTimeInMillis(date.getTime());
214 calendar.add(Calendar.YEAR, 0);
215 calendar.set(Calendar.MONTH, quartStartMonth - 1);
216 calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
217 calendar.set(Calendar.HOUR_OF_DAY, 23);
218 calendar.set(Calendar.MINUTE, 59);
219 calendar.set(Calendar.SECOND, 59);
220
221 return new Date(calendar.getTimeInMillis());
222 }
223
224 public static Calendar getCalendar() {
225 Calendar calendar = Calendar.getInstance();
226 calendar.setTimeZone(TimeZone.getTimeZone(SettleConst.TIMEZONE));
227 return calendar;
228 }
229
230 /**
231 * 获取两个日期间隔的天数
232 * @param minDate
233 * @param maxDate
234 * @return
235 */
236 public static Long betweenDay(Date minDate, Date maxDate) {
237 long maxTime = maxDate == null ? 0L : maxDate.getTime();
238 long minTime = minDate == null ? 0L : minDate.getTime();
239
240 Long day = (maxTime - minTime) / (1000 * 3600 * 24);
241 return day + 1;
242 }
243
244 /**
245 * 向前/向后偏移月份
246 * @param date
247 * @param month
248 * @return
249 */
250 public static Date offsetMonth(Date date, Integer month) {
251 Calendar calendar = Calendar.getInstance();
252 calendar.setTimeInMillis(date.getTime());
253 calendar.add(Calendar.MONTH, month);
254
255 return new Date(calendar.getTimeInMillis());
256 }
257
258
259 public static void main(String[] args) {
260 }
261
262 }