首页 > 其他分享 >日期工具类

日期工具类

时间:2023-05-31 23:55:45浏览次数:21  
标签:12 return String 日期 static 工具 public

  1 package jm.tsc.tsirm.common.helper;
  2 
  3 
  4 import java.text.SimpleDateFormat;
  5 import java.time.*;
  6 import java.time.format.DateTimeFormatter;
  7 import java.time.temporal.ChronoUnit;
  8 import java.time.temporal.TemporalAccessor;
  9 import java.time.temporal.TemporalAdjusters;
 10 import java.util.ArrayList;
 11 import java.util.Calendar;
 12 import java.util.Date;
 13 import java.util.List;
 14 
 15 /**
 16  * @PACKAGE_NAME: jm.tsc.tsirm.common.helper
 17  * @NAME: DateUtils
 18  * @USER: liul
 19  * @TIME: 2022/10/27 10:30
 20  * @DAY_NAME_SHORT: 周四
 21  */
 22 public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
 23 
 24 
 25     /**
 26      * 显示年月日时分秒,例如 2015-08-11 09:51:53.
 27      */
 28     public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
 29 
 30     /**
 31      * 仅显示年月日,例如 2015-08-11.
 32      */
 33     public static final String DATE_PATTERN = "yyyy-MM-dd";
 34 
 35     /**
 36      * 仅显示时分秒,例如 09:51:53.
 37      */
 38     public static final String TIME_PATTERN = "HH:mm:ss";
 39 
 40     /**
 41      * 显示年月日时分秒(无符号),例如 20150811095153.
 42      */
 43     public static final String UNSIGNED_DATETIME_PATTERN = "yyyyMMddHHmmss";
 44 
 45     /**
 46      * 仅显示年月日(无符号),例如 20150811.
 47      */
 48     public static final String UNSIGNED_DATE_PATTERN = "yyyyMMdd";
 49 
 50     /**
 51      * 春天;
 52      */
 53     public static final Integer SPRING = 1;
 54 
 55     /**
 56      * 夏天;
 57      */
 58     public static final Integer SUMMER = 2;
 59 
 60     /**
 61      * 秋天;
 62      */
 63     public static final Integer AUTUMN = 3;
 64 
 65     /**
 66      * 冬天;
 67      */
 68     public static final Integer WINTER = 4;
 69 
 70     /**
 71      * 星期日;
 72      */
 73     public static final String SUNDAY = "星期日";
 74 
 75     /**
 76      * 星期一;
 77      */
 78     public static final String MONDAY = "星期一";
 79 
 80     /**
 81      * 星期二;
 82      */
 83     public static final String TUESDAY = "星期二";
 84 
 85     /**
 86      * 星期三;
 87      */
 88     public static final String WEDNESDAY = "星期三";
 89 
 90     /**
 91      * 星期四;
 92      */
 93     public static final String THURSDAY = "星期四";
 94 
 95     /**
 96      * 星期五;
 97      */
 98     public static final String FRIDAY = "星期五";
 99 
100     /**
101      * 星期六;
102      */
103     public static final String SATURDAY = "星期六";
104 
105     /**
106      * 年
107      */
108     private static final String YEAR = "year";
109 
110     /**
111      * 月
112      */
113     private static final String MONTH = "month";
114 
115     /**
116      * 周
117      */
118     private static final String WEEK = "week";
119 
120     /**
121      * 日
122      */
123     private static final String DAY = "day";
124 
125     /**
126      * 时
127      */
128     private static final String HOUR = "hour";
129 
130     /**
131      * 分
132      */
133     private static final String MINUTE = "minute";
134 
135     /**
136      * 秒
137      */
138     private static final String SECOND = "second";
139 
140 
141     /**
142      * 获取当前日期和时间字符串.
143      *
144      * @return String 日期时间字符串,例如 2015-08-11 09:51:53
145      */
146     public static String getLocalDateTimeStr() {
147         return format(LocalDateTime.now(), DATETIME_PATTERN);
148     }
149 
150     /**
151      * 获取系统当前时间戳
152      *
153      * @return 1566889186583
154      */
155     public static String getSystemTime() {
156         String current = String.valueOf(System.currentTimeMillis());
157         return current;
158     }
159 
160 
161     /**
162      * 获取当前日期 yy-MM-dd
163      *
164      * @return 2019-08-27
165      */
166     public static String getLocalDateStr() {
167         Date date = new Date();
168         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
169         return sdf.format(date);
170     }
171     /**
172      * 获取当前时间字符串.
173      *
174      * @return String 时间字符串,例如 09:51:53
175      */
176     public static String getLocalTimeStr() {
177         return format(LocalTime.now(), TIME_PATTERN);
178     }
179     /**
180      * 获取当前月份
181      */
182     public static int getNowMonth(Date date) {
183         Calendar calendar = Calendar.getInstance();
184         calendar.setTime(date);
185         return calendar.get(Calendar.MONTH) + 1;
186     }
187 
188     /**
189      * 获取当前日
190      */
191     public static int getNowDay(Date date) {
192         Calendar calendar = Calendar.getInstance();
193         calendar.setTime(date);
194         return calendar.get(Calendar.DATE);
195     }
196 
197     /**
198      * 获取当前年份
199      */
200     public static int getNowYear(Date date) {
201         Calendar calendar = Calendar.getInstance();
202         calendar.setTime(date);
203         return calendar.get(Calendar.YEAR);
204     }
205 
206     /**
207      * 获取本月份的天数
208      */
209     public static int getNowDaysOfMonth() {
210         Calendar calendar = Calendar.getInstance();
211         return daysOfMonth(calendar.get(Calendar.YEAR), calendar.get(Calendar.DATE) + 1);
212     }
213 
214     /**
215      * 获取指定月份的天数
216      *
217      * @param year  年份
218      * @param month 月份
219      * @return 对应天数
220      */
221     public static int daysOfMonth(int year, int month) {
222         switch (month) {
223             case 1:
224             case 3:
225             case 5:
226             case 7:
227             case 8:
228             case 10:
229             case 12:
230                 return 31;
231             case 4:
232             case 6:
233             case 9:
234             case 11:
235                 return 30;
236             case 2:
237                 if ((year % 4 == 0 && year % 100 == 0) || year % 400 != 0) {
238                     return 29;
239                 } else {
240                     return 28;
241                 }
242             default:
243                 return -1;
244         }
245     }
246 
247     /**
248      * 获取当前星期字符串.
249      *
250      * @return String 当前星期字符串,例如 星期二
251      */
252     public static String getDayOfWeekStr() {
253         return format(LocalDate.now(), "E");
254     }
255 
256     /**
257      * 获取指定日期是星期几
258      *
259      * @param localDate 日期
260      * @return String 星期几
261      */
262     public static String getDayOfWeekStr(LocalDate localDate) {
263         String[] weekOfDays = {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY};
264         int dayOfWeek = localDate.getDayOfWeek().getValue() - 1;
265         return weekOfDays[dayOfWeek];
266     }
267 
268     /**
269      * 获取日期时间字符串
270      *
271      * @param temporal 需要转化的日期时间 可传入LocalDate
272      * @param pattern  时间格式
273      * @return String 日期时间字符串,例如 2015-08-11 09:51:53
274      */
275     public static String format(TemporalAccessor temporal, String pattern) {
276         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
277         return dateTimeFormatter.format(temporal);
278     }
279 
280     /**
281      * 获取指定日期前一天
282      *
283      * @return 2019-08-26
284      */
285     public static String getBeforeDay(Date date) {
286 
287         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
288         Calendar calendar = Calendar.getInstance();
289         calendar.setTime(date);
290         calendar.add(Calendar.DAY_OF_MONTH, -1);
291         date = calendar.getTime();
292         return sdf.format(date);
293     }
294 
295     /**
296      * 获取指定日期往前最近七天
297      *
298      * @param date 指定时间
299      * @return
300      */
301     public static String getServen(Date date) {
302         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
303         Calendar c = Calendar.getInstance();
304         c.setTime(date);
305         c.add(Calendar.DATE, -7);
306         Date monday = c.getTime();
307         String preMonday = sdf.format(monday);
308         return preMonday;
309     }
310 
311     /**
312      * 获取最近一个月
313      *
314      * @param date 指定时间
315      * @return
316      */
317     public static String getOneMonth(Date date) {
318         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
319         Calendar c = Calendar.getInstance();
320         c.setTime(date);
321         c.add(Calendar.MONTH, -1);
322         Date monday = c.getTime();
323         String preMonday = sdf.format(monday);
324         return preMonday;
325     }
326 
327     /**
328      * 获取最近三个月
329      *
330      * @param date 指定时间
331      * @return
332      */
333     public static String getThreeMonth(Date date) {
334         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
335         Calendar c = Calendar.getInstance();
336         c.setTime(date);
337         c.add(Calendar.MONTH, -3);
338         Date monday = c.getTime();
339         String preMonday = sdf.format(monday);
340         return preMonday;
341     }
342 
343 
344     /**
345      * 获取最近一年
346      *
347      * @param date 指定时间
348      * @return
349      */
350     public static String getOneYear(Date date) {
351         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
352         Calendar c = Calendar.getInstance();
353         c.setTime(date);
354         c.add(Calendar.YEAR, -1);
355         Date start = c.getTime();
356         String startDay = sdf.format(start);
357         return startDay;
358     }
359 
360     /**
361      * 日期时间字符串转换为日期时间(java.time.LocalDateTime)
362      *
363      * @param localDateTimeStr 日期时间字符串
364      * @param pattern          日期时间格式 例如DATETIME_PATTERN
365      * @return LocalDateTime 日期时间
366      */
367     public static LocalDateTime parseLocalDateTime(String localDateTimeStr, String pattern) {
368         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
369         return LocalDateTime.parse(localDateTimeStr, dateTimeFormatter);
370     }
371 
372     /**
373      * 日期字符串转换为日期(java.time.LocalDate)
374      *
375      * @param localDateStr 日期字符串
376      * @param pattern      日期格式 例如DATE_PATTERN
377      * @return LocalDate 日期
378      */
379     public static LocalDate parseLocalDate(String localDateStr, String pattern) {
380         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
381         return LocalDate.parse(localDateStr, dateTimeFormatter);
382     }
383 
384     /**
385      * 获取指定日期时间加上指定数量日期时间单位之后的日期时间.
386      *
387      * @param localDateTime 日期时间
388      * @param num           数量
389      * @param chronoUnit    日期时间单位
390      * @return LocalDateTime 新的日期时间
391      */
392     public static LocalDateTime plus(LocalDateTime localDateTime, int num, ChronoUnit chronoUnit) {
393         return localDateTime.plus(num, chronoUnit);
394     }
395 
396     /**
397      * 获取指定日期时间减去指定数量日期时间单位之后的日期时间.
398      *
399      * @param localDateTime 日期时间
400      * @param num           数量
401      * @param chronoUnit    日期时间单位
402      * @return LocalDateTime 新的日期时间
403      */
404     public static LocalDateTime minus(LocalDateTime localDateTime, int num, ChronoUnit chronoUnit) {
405         return localDateTime.minus(num, chronoUnit);
406     }
407 
408     /**
409      * 根据ChronoUnit计算两个日期时间之间相隔日期时间
410      *
411      * @param start      开始日期时间
412      * @param end        结束日期时间
413      * @param chronoUnit 日期时间单位
414      * @return long 相隔日期时间
415      */
416     public static long getChronoUnitBetween(LocalDateTime start, LocalDateTime end, ChronoUnit chronoUnit) {
417         return Math.abs(start.until(end, chronoUnit));
418     }
419 
420     /**
421      * 根据ChronoUnit计算两个日期之间相隔年数或月数或天数
422      *
423      * @param start      开始日期
424      * @param end        结束日期
425      * @param chronoUnit 日期时间单位,(ChronoUnit.YEARS,ChronoUnit.MONTHS,ChronoUnit.WEEKS,ChronoUnit.DAYS)
426      * @return long 相隔年数或月数或天数
427      */
428     public static long getChronoUnitBetween(LocalDate start, LocalDate end, ChronoUnit chronoUnit) {
429         return Math.abs(start.until(end, chronoUnit));
430     }
431 
432     /**
433      * 获取本年第一天的日期字符串
434      *
435      * @return String 格式:yyyy-MM-dd 00:00:00
436      */
437     public static String getFirstDayOfYearStr() {
438         return getFirstDayOfYearStr(LocalDateTime.now());
439     }
440 
441     /**
442      * 获取本年最后一天的日期字符串
443      *
444      * @return String 格式:yyyy-MM-dd 23:59:59
445      */
446     public static String getLastDayOfYearStr() {
447         return getLastDayOfYearStr(LocalDateTime.now());
448     }
449 
450     /**
451      * 获取指定日期当年第一天的日期字符串
452      *
453      * @param localDateTime 指定日期时间
454      * @return String 格式:yyyy-MM-dd 00:00:00
455      */
456     public static String getFirstDayOfYearStr(LocalDateTime localDateTime) {
457         return getFirstDayOfYearStr(localDateTime, DATETIME_PATTERN);
458     }
459 
460     /**
461      * 获取指定日期当年最后一天的日期字符串
462      *
463      * @param localDateTime 指定日期时间
464      * @return String 格式:yyyy-MM-dd 23:59:59
465      */
466     public static String getLastDayOfYearStr(LocalDateTime localDateTime) {
467         return getLastDayOfYearStr(localDateTime, DATETIME_PATTERN);
468     }
469 
470     /**
471      * 获取指定日期当年第一天的日期字符串,带日期格式化参数
472      *
473      * @param localDateTime 指定日期时间
474      * @param pattern       日期时间格式
475      * @return String 格式:yyyy-MM-dd 00:00:00
476      */
477     public static String getFirstDayOfYearStr(LocalDateTime localDateTime, String pattern) {
478         return format(localDateTime.withDayOfYear(1).withHour(0).withMinute(0).withSecond(0), pattern);
479     }
480 
481     /**
482      * 获取指定日期当年最后一天的日期字符串,带日期格式化参数
483      *
484      * @param localDateTime 指定日期时间
485      * @param pattern       日期时间格式
486      * @return String 格式:yyyy-MM-dd 23:59:59
487      */
488     public static String getLastDayOfYearStr(LocalDateTime localDateTime, String pattern) {
489         return format(localDateTime.with(TemporalAdjusters.lastDayOfYear()).withHour(23).withMinute(59).withSecond(59), pattern);
490     }
491 
492     /**
493      * 获取本月第一天的日期字符串
494      *
495      * @return String 格式:yyyy-MM-dd 00:00:00
496      */
497     public static String getFirstDayOfMonthStr() {
498         return getFirstDayOfMonthStr(LocalDateTime.now());
499     }
500 
501     /**
502      * 获取本月最后一天的日期字符串
503      *
504      * @return String 格式:yyyy-MM-dd 23:59:59
505      */
506     public static String getLastDayOfMonthStr() {
507         return getLastDayOfMonthStr(LocalDateTime.now());
508     }
509 
510     /**
511      * 获取指定日期当月第一天的日期字符串
512      *
513      * @param localDateTime 指定日期时间
514      * @return String 格式:yyyy-MM-dd 23:59:59
515      */
516     public static String getFirstDayOfMonthStr(LocalDateTime localDateTime) {
517         return getFirstDayOfMonthStr(localDateTime, DATETIME_PATTERN);
518     }
519 
520     /**
521      * 获取指定日期当月最后一天的日期字符串
522      *
523      * @param localDateTime 指定日期时间
524      * @return String 格式:yyyy-MM-dd 23:59:59
525      */
526     public static String getLastDayOfMonthStr(LocalDateTime localDateTime) {
527         return getLastDayOfMonthStr(localDateTime, DATETIME_PATTERN);
528     }
529 
530     /**
531      * 获取指定日期当月第一天的日期字符串,带日期格式化参数
532      *
533      * @param localDateTime 指定日期时间
534      * @return String 格式:yyyy-MM-dd 00:00:00
535      */
536     public static String getFirstDayOfMonthStr(LocalDateTime localDateTime, String pattern) {
537         return format(localDateTime.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0), pattern);
538     }
539 
540     /**
541      * 获取指定日期当月最后一天的日期字符串,带日期格式化参数
542      *
543      * @param localDateTime 指定日期时间
544      * @param pattern       日期时间格式
545      * @return String 格式:yyyy-MM-dd 23:59:59
546      */
547     public static String getLastDayOfMonthStr(LocalDateTime localDateTime, String pattern) {
548         return format(localDateTime.with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59), pattern);
549     }
550 
551     /**
552      * 获取本周第一天的日期字符串
553      *
554      * @return String 格式:yyyy-MM-dd 00:00:00
555      */
556     public static String getFirstDayOfWeekStr() {
557         return getFirstDayOfWeekStr(LocalDateTime.now());
558     }
559 
560     /**
561      * 获取本周最后一天的日期字符串
562      *
563      * @return String 格式:yyyy-MM-dd 23:59:59
564      */
565     public static String getLastDayOfWeekStr() {
566         return getLastDayOfWeekStr(LocalDateTime.now());
567     }
568 
569     /**
570      * 获取指定日期当周第一天的日期字符串,这里第一天为周一
571      *
572      * @param localDateTime 指定日期时间
573      * @return String 格式:yyyy-MM-dd 00:00:00
574      */
575     public static String getFirstDayOfWeekStr(LocalDateTime localDateTime) {
576         return getFirstDayOfWeekStr(localDateTime, DATETIME_PATTERN);
577     }
578 
579     /**
580      * 获取指定日期当周最后一天的日期字符串,这里最后一天为周日
581      *
582      * @param localDateTime 指定日期时间
583      * @return String 格式:yyyy-MM-dd 23:59:59
584      */
585     public static String getLastDayOfWeekStr(LocalDateTime localDateTime) {
586         return getLastDayOfWeekStr(localDateTime, DATETIME_PATTERN);
587     }
588 
589     /**
590      * 获取指定日期当周第一天的日期字符串,这里第一天为周一,带日期格式化参数
591      *
592      * @param localDateTime 指定日期时间
593      * @param pattern       日期时间格式
594      * @return String 格式:yyyy-MM-dd 00:00:00
595      */
596     public static String getFirstDayOfWeekStr(LocalDateTime localDateTime, String pattern) {
597         return format(localDateTime.with(DayOfWeek.MONDAY).withHour(0).withMinute(0).withSecond(0), pattern);
598     }
599 
600     /**
601      * 获取指定日期当周最后一天的日期字符串,这里最后一天为周日,带日期格式化参数
602      *
603      * @param localDateTime 指定日期时间
604      * @param pattern       日期时间格式
605      * @return String 格式:yyyy-MM-dd 23:59:59
606      */
607     public static String getLastDayOfWeekStr(LocalDateTime localDateTime, String pattern) {
608         return format(localDateTime.with(DayOfWeek.SUNDAY).withHour(23).withMinute(59).withSecond(59), pattern);
609     }
610 
611     /**
612      * 获取今天开始时间的日期字符串
613      *
614      * @return String 格式:yyyy-MM-dd 00:00:00
615      */
616     public static String getStartTimeOfDayStr() {
617         return getStartTimeOfDayStr(LocalDateTime.now());
618     }
619 
620     /**
621      * 获取今天结束时间的日期字符串
622      *
623      * @return String 格式:yyyy-MM-dd 23:59:59
624      */
625     public static String getEndTimeOfDayStr() {
626         return getEndTimeOfDayStr(LocalDateTime.now());
627     }
628 
629     /**
630      * 获取指定日期开始时间的日期字符串
631      *
632      * @param localDateTime 指定日期时间
633      * @return String 格式:yyyy-MM-dd 00:00:00
634      */
635     public static String getStartTimeOfDayStr(LocalDateTime localDateTime) {
636         return getStartTimeOfDayStr(localDateTime, DATETIME_PATTERN);
637     }
638 
639     /**
640      * 获取指定日期结束时间的日期字符串
641      *
642      * @param localDateTime 指定日期时间
643      * @return String 格式:yyyy-MM-dd 23:59:59
644      */
645     public static String getEndTimeOfDayStr(LocalDateTime localDateTime) {
646         return getEndTimeOfDayStr(localDateTime, DATETIME_PATTERN);
647     }
648 
649     /**
650      * 获取指定日期开始时间的日期字符串,带日期格式化参数
651      *
652      * @param localDateTime 指定日期时间
653      * @param pattern       日期时间格式
654      * @return String 格式:yyyy-MM-dd HH:mm:ss
655      */
656     public static String getStartTimeOfDayStr(LocalDateTime localDateTime, String pattern) {
657         return format(localDateTime.withHour(0).withMinute(0).withSecond(0), pattern);
658     }
659 
660     /**
661      * 获取指定日期结束时间的日期字符串,带日期格式化参数
662      *
663      * @param localDateTime 指定日期时间
664      * @param pattern       日期时间格式
665      * @return String 格式:yyyy-MM-dd 23:59:59
666      */
667     public static String getEndTimeOfDayStr(LocalDateTime localDateTime, String pattern) {
668         return format(localDateTime.withHour(23).withMinute(59).withSecond(59), pattern);
669     }
670 
671     public static String dayComparePrecise(Date fromDate, Date toDate){
672         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
673         if(fromDate==null||toDate==null){
674             return "不足一个月";
675         }
676         Period period = Period.between(LocalDate.parse(format.format(fromDate)), LocalDate.parse(format.format(toDate)));
677 
678         StringBuffer sb = new StringBuffer();
679         if(period.getYears()>0){
680             sb.append(period.getYears()).append("年");
681         }
682         if(period.getMonths()>0) {
683             sb.append(period.getMonths()).append("个月");
684         }
685         if(period.getYears()<=0&&period.getMonths()<=0){
686             sb.append("不足一个月");
687         }
688         return sb.toString();
689     }
690 
691     /**
692      * Date转LocalDateTime类型
693      * localDateTime.toLocalDate();
694      * ocalDateTime.toLocalDate();
695      *
696      * @param date 指定日期
697      * @return
698      */
699     public static LocalDateTime dataToLocalDatetime(Date date){
700         if(date==null){
701             return null;
702         }
703         Instant instant = date.toInstant();
704         ZoneId zone = ZoneId.systemDefault();
705         //Date转换为LocalDateTime
706         LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
707         return localDateTime;
708     }
709 
710     /**
711      * 切割日期。按照周期切割成小段日期段。例如: <br>
712      *
713      * @param startDate 开始日期(yyyy-MM-dd)
714      * @param endDate   结束日期(yyyy-MM-dd)
715      * @param period    周期(天,周,月,年)
716      * @return 切割之后的日期集合
717      * <li>startDate="2019-02-28",endDate="2019-03-05",period="day"</li>
718      * <li>结果为:[2019-02-28, 2019-03-01, 2019-03-02, 2019-03-03, 2019-03-04, 2019-03-05]</li><br>
719      * <li>startDate="2019-02-28",endDate="2019-03-25",period="week"</li>
720      * <li>结果为:[2019-02-28,2019-03-06, 2019-03-07,2019-03-13, 2019-03-14,2019-03-20,
721      * 2019-03-21,2019-03-25]</li><br>
722      * <li>startDate="2019-02-28",endDate="2019-05-25",period="month"</li>
723      * <li>结果为:[2019-02-28,2019-02-28, 2019-03-01,2019-03-31, 2019-04-01,2019-04-30,
724      * 2019-05-01,2019-05-25]</li><br>
725      * <li>startDate="2019-02-28",endDate="2020-05-25",period="year"</li>
726      * <li>结果为:[2019-02-28,2019-12-31, 2020-01-01,2020-05-25]</li><br>
727      */
728     public static List<String> listDateStrs(String startDate, String endDate, String period) {
729         List<String> result = new ArrayList<>();
730         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_PATTERN);
731         LocalDate end = LocalDate.parse(endDate, dateTimeFormatter);
732         LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
733         LocalDate tmp = start;
734         switch (period) {
735             case DAY:
736                 while (start.isBefore(end) || start.isEqual(end)) {
737                     result.add(start.toString());
738                     start = start.plusDays(1);
739                 }
740                 break;
741             case WEEK:
742                 while (tmp.isBefore(end) || tmp.isEqual(end)) {
743                     if (tmp.plusDays(6).isAfter(end)) {
744                         result.add(tmp.toString() + "," + end);
745                     } else {
746                         result.add(tmp.toString() + "," + tmp.plusDays(6));
747                     }
748                     tmp = tmp.plusDays(7);
749                 }
750                 break;
751             case MONTH:
752                 while (tmp.isBefore(end) || tmp.isEqual(end)) {
753                     LocalDate lastDayOfMonth = tmp.with(TemporalAdjusters.lastDayOfMonth());
754                     if (lastDayOfMonth.isAfter(end)) {
755                         result.add(tmp.toString() + "," + end);
756                     } else {
757                         result.add(tmp.toString() + "," + lastDayOfMonth);
758                     }
759                     tmp = lastDayOfMonth.plusDays(1);
760                 }
761                 break;
762             case YEAR:
763                 while (tmp.isBefore(end) || tmp.isEqual(end)) {
764                     LocalDate lastDayOfYear = tmp.with(TemporalAdjusters.lastDayOfYear());
765                     if (lastDayOfYear.isAfter(end)) {
766                         result.add(tmp.toString() + "," + end);
767                     } else {
768                         result.add(tmp.toString() + "," + lastDayOfYear);
769                     }
770                     tmp = lastDayOfYear.plusDays(1);
771                 }
772                 break;
773             default:
774                 break;
775         }
776         return result;
777     }
778 
779     public static void main(String[] args) {
780 //        System.out.println(getLocalDateTimeStr());
781 //        System.out.println(getLocalDateStr());
782 //        System.out.println(getSystemTime());
783 //        System.out.println(getLocalTimeStr());
784 //        System.out.println(getDayOfWeekStr());
785 //        System.out.println(getDayOfWeekStr(LocalDate.now()));
786 //
787 //        System.out.println("========");
788 //        System.out.println(format(LocalDate.now(), UNSIGNED_DATE_PATTERN));
789 
790 //        System.out.println("========");
791 //        System.out.println(parseLocalDateTime("2020-12-13 11:14:12", DATETIME_PATTERN));
792 //        System.out.println(parseLocalDate("2020-12-13", DATE_PATTERN));
793 
794 //        System.out.println("========");
795 //        System.out.println(plus(LocalDateTime.now(), 3, ChronoUnit.HOURS));
796 //        System.out.println(minus(LocalDateTime.now(), 4, ChronoUnit.DAYS));
797 //
798 //        System.out.println("========");
799 //        System.out.println(getChronoUnitBetween(LocalDateTime.now(), parseLocalDateTime("2020-12-12 12:03:12", DATETIME_PATTERN), ChronoUnit.MINUTES));
800 //        System.out.println(getChronoUnitBetween(LocalDate.now(), parseLocalDate("2021-12-12", DATE_PATTERN), ChronoUnit.WEEKS));
801 //
802 //        System.out.println("========");
803 //        System.out.println(getFirstDayOfYearStr());
804 //        System.out.println(getFirstDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));
805 //        System.out.println(getFirstDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));
806 //
807 //        System.out.println(getLastDayOfYearStr());
808 //        System.out.println(getLastDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));
809 //        System.out.println(getLastDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));
810 //
811 //        System.out.println("========");
812 //        System.out.println(getFirstDayOfMonthStr());
813 //        System.out.println(getFirstDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));
814 //        System.out.println(getFirstDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));
815 //
816 //        System.out.println(getLastDayOfMonthStr());
817 //        System.out.println(getLastDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));
818 //        System.out.println(getLastDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));
819 //
820 //        System.out.println("========");
821 //        System.out.println(getFirstDayOfWeekStr());
822 //        System.out.println(getFirstDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));
823 //        System.out.println(getFirstDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));
824 //
825 //        System.out.println(getLastDayOfWeekStr());
826 //        System.out.println(getLastDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));
827 //        System.out.println(getLastDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));
828 //
829 //        System.out.println("========");
830 //        System.out.println(getStartTimeOfDayStr());
831 //        System.out.println(getStartTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));
832 //        System.out.println(getStartTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));
833 //
834 //        System.out.println(getEndTimeOfDayStr());
835 //        System.out.println(getEndTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));
836 //        System.out.println(getEndTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));
837 //
838 //        System.out.println("========");
839 //        List<String> dateStrs = listDateStrs("2019-01-30", "2020-12-13", YEAR);
840 //        for (String dateStr : dateStrs) {
841 //            System.out.println(dateStr);
842 //        }
843 //
844 //        System.out.println("========");
845 //        List<String> dateStrs1 = listDateStrs("2019-01-30", "2020-12-13", MONTH);
846 //        for (String dateStr : dateStrs1) {
847 //            System.out.println(dateStr);
848 //        }
849 //
850 //        System.out.println("========");
851 //        List<String> dateStrs2 = listDateStrs("2020-12-01", "2020-12-13", DAY);
852 //        for (String dateStr : dateStrs2) {
853 //            System.out.println(dateStr);
854 //        }
855 
856         System.out.println(getThreeMonth(new Date()));
857         System.out.println(getNowDay(new Date()));
858         System.out.println(getNowYear(new Date()));
859     }
860 }

 

package jm.tsc.tsirm.common.helper;

import java.text.SimpleDateFormat;import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;import java.time.temporal.TemporalAccessor;import java.time.temporal.TemporalAdjusters;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;
/** * @PACKAGE_NAME: jm.tsc.tsirm.common.helper * @NAME: DateUtils * @USER: liul * @TIME: 2022/10/27 10:30 * @DAY_NAME_SHORT: 周四 */public class DateUtils extends org.apache.commons.lang3.time.DateUtils {

    /**     * 显示年月日时分秒,例如 2015-08-11 09:51:53.     */    public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    /**     * 仅显示年月日,例如 2015-08-11.     */    public static final String DATE_PATTERN = "yyyy-MM-dd";
    /**     * 仅显示时分秒,例如 09:51:53.     */    public static final String TIME_PATTERN = "HH:mm:ss";
    /**     * 显示年月日时分秒(无符号),例如 20150811095153.     */    public static final String UNSIGNED_DATETIME_PATTERN = "yyyyMMddHHmmss";
    /**     * 仅显示年月日(无符号),例如 20150811.     */    public static final String UNSIGNED_DATE_PATTERN = "yyyyMMdd";
    /**     * 春天;     */    public static final Integer SPRING = 1;
    /**     * 夏天;     */    public static final Integer SUMMER = 2;
    /**     * 秋天;     */    public static final Integer AUTUMN = 3;
    /**     * 冬天;     */    public static final Integer WINTER = 4;
    /**     * 星期日;     */    public static final String SUNDAY = "星期日";
    /**     * 星期一;     */    public static final String MONDAY = "星期一";
    /**     * 星期二;     */    public static final String TUESDAY = "星期二";
    /**     * 星期三;     */    public static final String WEDNESDAY = "星期三";
    /**     * 星期四;     */    public static final String THURSDAY = "星期四";
    /**     * 星期五;     */    public static final String FRIDAY = "星期五";
    /**     * 星期六;     */    public static final String SATURDAY = "星期六";
    /**     * 年     */    private static final String YEAR = "year";
    /**     * 月     */    private static final String MONTH = "month";
    /**     * 周     */    private static final String WEEK = "week";
    /**     * 日     */    private static final String DAY = "day";
    /**     * 时     */    private static final String HOUR = "hour";
    /**     * 分     */    private static final String MINUTE = "minute";
    /**     * 秒     */    private static final String SECOND = "second";

    /**     * 获取当前日期和时间字符串.     *     * @return String 日期时间字符串,例如 2015-08-11 09:51:53     */    public static String getLocalDateTimeStr() {        return format(LocalDateTime.now(), DATETIME_PATTERN);    }
    /**     * 获取系统当前时间戳     *     * @return 1566889186583     */    public static String getSystemTime() {        String current = String.valueOf(System.currentTimeMillis());        return current;    }

    /**     * 获取当前日期 yy-MM-dd     *     * @return 2019-08-27     */    public static String getLocalDateStr() {        Date date = new Date();        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");        return sdf.format(date);    }    /**     * 获取当前时间字符串.     *     * @return String 时间字符串,例如 09:51:53     */    public static String getLocalTimeStr() {        return format(LocalTime.now(), TIME_PATTERN);    }    /**     * 获取当前月份     */    public static int getNowMonth(Date date) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(date);        return calendar.get(Calendar.MONTH) + 1;    }
    /**     * 获取当前日     */    public static int getNowDay(Date date) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(date);        return calendar.get(Calendar.DATE);    }
    /**     * 获取当前年份     */    public static int getNowYear(Date date) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(date);        return calendar.get(Calendar.YEAR);    }
    /**     * 获取本月份的天数     */    public static int getNowDaysOfMonth() {        Calendar calendar = Calendar.getInstance();        return daysOfMonth(calendar.get(Calendar.YEAR), calendar.get(Calendar.DATE) + 1);    }
    /**     * 获取指定月份的天数     *     * @param year  年份     * @param month 月份     * @return 对应天数     */    public static int daysOfMonth(int year, int month) {        switch (month) {            case 1:            case 3:            case 5:            case 7:            case 8:            case 10:            case 12:                return 31;            case 4:            case 6:            case 9:            case 11:                return 30;            case 2:                if ((year % 4 == 0 && year % 100 == 0) || year % 400 != 0) {                    return 29;                } else {                    return 28;                }            default:                return -1;        }    }
    /**     * 获取当前星期字符串.     *     * @return String 当前星期字符串,例如 星期二     */    public static String getDayOfWeekStr() {        return format(LocalDate.now(), "E");    }
    /**     * 获取指定日期是星期几     *     * @param localDate 日期     * @return String 星期几     */    public static String getDayOfWeekStr(LocalDate localDate) {        String[] weekOfDays = {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY};        int dayOfWeek = localDate.getDayOfWeek().getValue() - 1;        return weekOfDays[dayOfWeek];    }
    /**     * 获取日期时间字符串     *     * @param temporal 需要转化的日期时间 可传入LocalDate     * @param pattern  时间格式     * @return String 日期时间字符串,例如 2015-08-11 09:51:53     */    public static String format(TemporalAccessor temporal, String pattern) {        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);        return dateTimeFormatter.format(temporal);    }
    /**     * 获取指定日期前一天     *     * @return 2019-08-26     */    public static String getBeforeDay(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");        Calendar calendar = Calendar.getInstance();        calendar.setTime(date);        calendar.add(Calendar.DAY_OF_MONTH, -1);        date = calendar.getTime();        return sdf.format(date);    }
    /**     * 获取指定日期往前最近七天     *     * @param date 指定时间     * @return     */    public static String getServen(Date date) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");        Calendar c = Calendar.getInstance();        c.setTime(date);        c.add(Calendar.DATE, -7);        Date monday = c.getTime();        String preMonday = sdf.format(monday);        return preMonday;    }
    /**     * 获取最近一个月     *     * @param date 指定时间     * @return     */    public static String getOneMonth(Date date) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");        Calendar c = Calendar.getInstance();        c.setTime(date);        c.add(Calendar.MONTH, -1);        Date monday = c.getTime();        String preMonday = sdf.format(monday);        return preMonday;    }
    /**     * 获取最近三个月     *     * @param date 指定时间     * @return     */    public static String getThreeMonth(Date date) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");        Calendar c = Calendar.getInstance();        c.setTime(date);        c.add(Calendar.MONTH, -3);        Date monday = c.getTime();        String preMonday = sdf.format(monday);        return preMonday;    }

    /**     * 获取最近一年     *     * @param date 指定时间     * @return     */    public static String getOneYear(Date date) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");        Calendar c = Calendar.getInstance();        c.setTime(date);        c.add(Calendar.YEAR, -1);        Date start = c.getTime();        String startDay = sdf.format(start);        return startDay;    }
    /**     * 日期时间字符串转换为日期时间(java.time.LocalDateTime)     *     * @param localDateTimeStr 日期时间字符串     * @param pattern          日期时间格式 例如DATETIME_PATTERN     * @return LocalDateTime 日期时间     */    public static LocalDateTime parseLocalDateTime(String localDateTimeStr, String pattern) {        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);        return LocalDateTime.parse(localDateTimeStr, dateTimeFormatter);    }
    /**     * 日期字符串转换为日期(java.time.LocalDate)     *     * @param localDateStr 日期字符串     * @param pattern      日期格式 例如DATE_PATTERN     * @return LocalDate 日期     */    public static LocalDate parseLocalDate(String localDateStr, String pattern) {        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);        return LocalDate.parse(localDateStr, dateTimeFormatter);    }
    /**     * 获取指定日期时间加上指定数量日期时间单位之后的日期时间.     *     * @param localDateTime 日期时间     * @param num           数量     * @param chronoUnit    日期时间单位     * @return LocalDateTime 新的日期时间     */    public static LocalDateTime plus(LocalDateTime localDateTime, int num, ChronoUnit chronoUnit) {        return localDateTime.plus(num, chronoUnit);    }
    /**     * 获取指定日期时间减去指定数量日期时间单位之后的日期时间.     *     * @param localDateTime 日期时间     * @param num           数量     * @param chronoUnit    日期时间单位     * @return LocalDateTime 新的日期时间     */    public static LocalDateTime minus(LocalDateTime localDateTime, int num, ChronoUnit chronoUnit) {        return localDateTime.minus(num, chronoUnit);    }
    /**     * 根据ChronoUnit计算两个日期时间之间相隔日期时间     *     * @param start      开始日期时间     * @param end        结束日期时间     * @param chronoUnit 日期时间单位     * @return long 相隔日期时间     */    public static long getChronoUnitBetween(LocalDateTime start, LocalDateTime end, ChronoUnit chronoUnit) {        return Math.abs(start.until(end, chronoUnit));    }
    /**     * 根据ChronoUnit计算两个日期之间相隔年数或月数或天数     *     * @param start      开始日期     * @param end        结束日期     * @param chronoUnit 日期时间单位,(ChronoUnit.YEARS,ChronoUnit.MONTHS,ChronoUnit.WEEKS,ChronoUnit.DAYS)     * @return long 相隔年数或月数或天数     */    public static long getChronoUnitBetween(LocalDate start, LocalDate end, ChronoUnit chronoUnit) {        return Math.abs(start.until(end, chronoUnit));    }
    /**     * 获取本年第一天的日期字符串     *     * @return String 格式:yyyy-MM-dd 00:00:00     */    public static String getFirstDayOfYearStr() {        return getFirstDayOfYearStr(LocalDateTime.now());    }
    /**     * 获取本年最后一天的日期字符串     *     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getLastDayOfYearStr() {        return getLastDayOfYearStr(LocalDateTime.now());    }
    /**     * 获取指定日期当年第一天的日期字符串     *     * @param localDateTime 指定日期时间     * @return String 格式:yyyy-MM-dd 00:00:00     */    public static String getFirstDayOfYearStr(LocalDateTime localDateTime) {        return getFirstDayOfYearStr(localDateTime, DATETIME_PATTERN);    }
    /**     * 获取指定日期当年最后一天的日期字符串     *     * @param localDateTime 指定日期时间     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getLastDayOfYearStr(LocalDateTime localDateTime) {        return getLastDayOfYearStr(localDateTime, DATETIME_PATTERN);    }
    /**     * 获取指定日期当年第一天的日期字符串,带日期格式化参数     *     * @param localDateTime 指定日期时间     * @param pattern       日期时间格式     * @return String 格式:yyyy-MM-dd 00:00:00     */    public static String getFirstDayOfYearStr(LocalDateTime localDateTime, String pattern) {        return format(localDateTime.withDayOfYear(1).withHour(0).withMinute(0).withSecond(0), pattern);    }
    /**     * 获取指定日期当年最后一天的日期字符串,带日期格式化参数     *     * @param localDateTime 指定日期时间     * @param pattern       日期时间格式     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getLastDayOfYearStr(LocalDateTime localDateTime, String pattern) {        return format(localDateTime.with(TemporalAdjusters.lastDayOfYear()).withHour(23).withMinute(59).withSecond(59), pattern);    }
    /**     * 获取本月第一天的日期字符串     *     * @return String 格式:yyyy-MM-dd 00:00:00     */    public static String getFirstDayOfMonthStr() {        return getFirstDayOfMonthStr(LocalDateTime.now());    }
    /**     * 获取本月最后一天的日期字符串     *     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getLastDayOfMonthStr() {        return getLastDayOfMonthStr(LocalDateTime.now());    }
    /**     * 获取指定日期当月第一天的日期字符串     *     * @param localDateTime 指定日期时间     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getFirstDayOfMonthStr(LocalDateTime localDateTime) {        return getFirstDayOfMonthStr(localDateTime, DATETIME_PATTERN);    }
    /**     * 获取指定日期当月最后一天的日期字符串     *     * @param localDateTime 指定日期时间     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getLastDayOfMonthStr(LocalDateTime localDateTime) {        return getLastDayOfMonthStr(localDateTime, DATETIME_PATTERN);    }
    /**     * 获取指定日期当月第一天的日期字符串,带日期格式化参数     *     * @param localDateTime 指定日期时间     * @return String 格式:yyyy-MM-dd 00:00:00     */    public static String getFirstDayOfMonthStr(LocalDateTime localDateTime, String pattern) {        return format(localDateTime.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0), pattern);    }
    /**     * 获取指定日期当月最后一天的日期字符串,带日期格式化参数     *     * @param localDateTime 指定日期时间     * @param pattern       日期时间格式     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getLastDayOfMonthStr(LocalDateTime localDateTime, String pattern) {        return format(localDateTime.with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59), pattern);    }
    /**     * 获取本周第一天的日期字符串     *     * @return String 格式:yyyy-MM-dd 00:00:00     */    public static String getFirstDayOfWeekStr() {        return getFirstDayOfWeekStr(LocalDateTime.now());    }
    /**     * 获取本周最后一天的日期字符串     *     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getLastDayOfWeekStr() {        return getLastDayOfWeekStr(LocalDateTime.now());    }
    /**     * 获取指定日期当周第一天的日期字符串,这里第一天为周一     *     * @param localDateTime 指定日期时间     * @return String 格式:yyyy-MM-dd 00:00:00     */    public static String getFirstDayOfWeekStr(LocalDateTime localDateTime) {        return getFirstDayOfWeekStr(localDateTime, DATETIME_PATTERN);    }
    /**     * 获取指定日期当周最后一天的日期字符串,这里最后一天为周日     *     * @param localDateTime 指定日期时间     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getLastDayOfWeekStr(LocalDateTime localDateTime) {        return getLastDayOfWeekStr(localDateTime, DATETIME_PATTERN);    }
    /**     * 获取指定日期当周第一天的日期字符串,这里第一天为周一,带日期格式化参数     *     * @param localDateTime 指定日期时间     * @param pattern       日期时间格式     * @return String 格式:yyyy-MM-dd 00:00:00     */    public static String getFirstDayOfWeekStr(LocalDateTime localDateTime, String pattern) {        return format(localDateTime.with(DayOfWeek.MONDAY).withHour(0).withMinute(0).withSecond(0), pattern);    }
    /**     * 获取指定日期当周最后一天的日期字符串,这里最后一天为周日,带日期格式化参数     *     * @param localDateTime 指定日期时间     * @param pattern       日期时间格式     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getLastDayOfWeekStr(LocalDateTime localDateTime, String pattern) {        return format(localDateTime.with(DayOfWeek.SUNDAY).withHour(23).withMinute(59).withSecond(59), pattern);    }
    /**     * 获取今天开始时间的日期字符串     *     * @return String 格式:yyyy-MM-dd 00:00:00     */    public static String getStartTimeOfDayStr() {        return getStartTimeOfDayStr(LocalDateTime.now());    }
    /**     * 获取今天结束时间的日期字符串     *     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getEndTimeOfDayStr() {        return getEndTimeOfDayStr(LocalDateTime.now());    }
    /**     * 获取指定日期开始时间的日期字符串     *     * @param localDateTime 指定日期时间     * @return String 格式:yyyy-MM-dd 00:00:00     */    public static String getStartTimeOfDayStr(LocalDateTime localDateTime) {        return getStartTimeOfDayStr(localDateTime, DATETIME_PATTERN);    }
    /**     * 获取指定日期结束时间的日期字符串     *     * @param localDateTime 指定日期时间     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getEndTimeOfDayStr(LocalDateTime localDateTime) {        return getEndTimeOfDayStr(localDateTime, DATETIME_PATTERN);    }
    /**     * 获取指定日期开始时间的日期字符串,带日期格式化参数     *     * @param localDateTime 指定日期时间     * @param pattern       日期时间格式     * @return String 格式:yyyy-MM-dd HH:mm:ss     */    public static String getStartTimeOfDayStr(LocalDateTime localDateTime, String pattern) {        return format(localDateTime.withHour(0).withMinute(0).withSecond(0), pattern);    }
    /**     * 获取指定日期结束时间的日期字符串,带日期格式化参数     *     * @param localDateTime 指定日期时间     * @param pattern       日期时间格式     * @return String 格式:yyyy-MM-dd 23:59:59     */    public static String getEndTimeOfDayStr(LocalDateTime localDateTime, String pattern) {        return format(localDateTime.withHour(23).withMinute(59).withSecond(59), pattern);    }
    public static String dayComparePrecise(Date fromDate, Date toDate){        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");        if(fromDate==null||toDate==null){            return "不足一个月";        }        Period period = Period.between(LocalDate.parse(format.format(fromDate)), LocalDate.parse(format.format(toDate)));
        StringBuffer sb = new StringBuffer();        if(period.getYears()>0){            sb.append(period.getYears()).append("年");        }        if(period.getMonths()>0) {            sb.append(period.getMonths()).append("个月");        }        if(period.getYears()<=0&&period.getMonths()<=0){            sb.append("不足一个月");        }        return sb.toString();    }
    /**     * Date转LocalDateTime类型     * localDateTime.toLocalDate();     * ocalDateTime.toLocalDate();     *     * @param date 指定日期     * @return     */    public static LocalDateTime dataToLocalDatetime(Date date){        if(date==null){            return null;        }        Instant instant = date.toInstant();        ZoneId zone = ZoneId.systemDefault();        //Date转换为LocalDateTime        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);        return localDateTime;    }
    /**     * 切割日期。按照周期切割成小段日期段。例如: <br>     *     * @param startDate 开始日期(yyyy-MM-dd)     * @param endDate   结束日期(yyyy-MM-dd)     * @param period    周期(天,周,月,年)     * @return 切割之后的日期集合     * <li>startDate="2019-02-28",endDate="2019-03-05",period="day"</li>     * <li>结果为:[2019-02-28, 2019-03-01, 2019-03-02, 2019-03-03, 2019-03-04, 2019-03-05]</li><br>     * <li>startDate="2019-02-28",endDate="2019-03-25",period="week"</li>     * <li>结果为:[2019-02-28,2019-03-06, 2019-03-07,2019-03-13, 2019-03-14,2019-03-20,     * 2019-03-21,2019-03-25]</li><br>     * <li>startDate="2019-02-28",endDate="2019-05-25",period="month"</li>     * <li>结果为:[2019-02-28,2019-02-28, 2019-03-01,2019-03-31, 2019-04-01,2019-04-30,     * 2019-05-01,2019-05-25]</li><br>     * <li>startDate="2019-02-28",endDate="2020-05-25",period="year"</li>     * <li>结果为:[2019-02-28,2019-12-31, 2020-01-01,2020-05-25]</li><br>     */    public static List<String> listDateStrs(String startDate, String endDate, String period) {        List<String> result = new ArrayList<>();        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_PATTERN);        LocalDate end = LocalDate.parse(endDate, dateTimeFormatter);        LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);        LocalDate tmp = start;        switch (period) {            case DAY:                while (start.isBefore(end) || start.isEqual(end)) {                    result.add(start.toString());                    start = start.plusDays(1);                }                break;            case WEEK:                while (tmp.isBefore(end) || tmp.isEqual(end)) {                    if (tmp.plusDays(6).isAfter(end)) {                        result.add(tmp.toString() + "," + end);                    } else {                        result.add(tmp.toString() + "," + tmp.plusDays(6));                    }                    tmp = tmp.plusDays(7);                }                break;            case MONTH:                while (tmp.isBefore(end) || tmp.isEqual(end)) {                    LocalDate lastDayOfMonth = tmp.with(TemporalAdjusters.lastDayOfMonth());                    if (lastDayOfMonth.isAfter(end)) {                        result.add(tmp.toString() + "," + end);                    } else {                        result.add(tmp.toString() + "," + lastDayOfMonth);                    }                    tmp = lastDayOfMonth.plusDays(1);                }                break;            case YEAR:                while (tmp.isBefore(end) || tmp.isEqual(end)) {                    LocalDate lastDayOfYear = tmp.with(TemporalAdjusters.lastDayOfYear());                    if (lastDayOfYear.isAfter(end)) {                        result.add(tmp.toString() + "," + end);                    } else {                        result.add(tmp.toString() + "," + lastDayOfYear);                    }                    tmp = lastDayOfYear.plusDays(1);                }                break;            default:                break;        }        return result;    }
    public static void main(String[] args) {//        System.out.println(getLocalDateTimeStr());//        System.out.println(getLocalDateStr());//        System.out.println(getSystemTime());//        System.out.println(getLocalTimeStr());//        System.out.println(getDayOfWeekStr());//        System.out.println(getDayOfWeekStr(LocalDate.now()));////        System.out.println("========");//        System.out.println(format(LocalDate.now(), UNSIGNED_DATE_PATTERN));
//        System.out.println("========");//        System.out.println(parseLocalDateTime("2020-12-13 11:14:12", DATETIME_PATTERN));//        System.out.println(parseLocalDate("2020-12-13", DATE_PATTERN));
//        System.out.println("========");//        System.out.println(plus(LocalDateTime.now(), 3, ChronoUnit.HOURS));//        System.out.println(minus(LocalDateTime.now(), 4, ChronoUnit.DAYS));////        System.out.println("========");//        System.out.println(getChronoUnitBetween(LocalDateTime.now(), parseLocalDateTime("2020-12-12 12:03:12", DATETIME_PATTERN), ChronoUnit.MINUTES));//        System.out.println(getChronoUnitBetween(LocalDate.now(), parseLocalDate("2021-12-12", DATE_PATTERN), ChronoUnit.WEEKS));////        System.out.println("========");//        System.out.println(getFirstDayOfYearStr());//        System.out.println(getFirstDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));//        System.out.println(getFirstDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));////        System.out.println(getLastDayOfYearStr());//        System.out.println(getLastDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));//        System.out.println(getLastDayOfYearStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));////        System.out.println("========");//        System.out.println(getFirstDayOfMonthStr());//        System.out.println(getFirstDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));//        System.out.println(getFirstDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));////        System.out.println(getLastDayOfMonthStr());//        System.out.println(getLastDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));//        System.out.println(getLastDayOfMonthStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));////        System.out.println("========");//        System.out.println(getFirstDayOfWeekStr());//        System.out.println(getFirstDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));//        System.out.println(getFirstDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));////        System.out.println(getLastDayOfWeekStr());//        System.out.println(getLastDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));//        System.out.println(getLastDayOfWeekStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));////        System.out.println("========");//        System.out.println(getStartTimeOfDayStr());//        System.out.println(getStartTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));//        System.out.println(getStartTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));////        System.out.println(getEndTimeOfDayStr());//        System.out.println(getEndTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN)));//        System.out.println(getEndTimeOfDayStr(parseLocalDateTime("2021-12-12 12:03:12", DATETIME_PATTERN), UNSIGNED_DATETIME_PATTERN));////        System.out.println("========");//        List<String> dateStrs = listDateStrs("2019-01-30", "2020-12-13", YEAR);//        for (String dateStr : dateStrs) {//            System.out.println(dateStr);//        }////        System.out.println("========");//        List<String> dateStrs1 = listDateStrs("2019-01-30", "2020-12-13", MONTH);//        for (String dateStr : dateStrs1) {//            System.out.println(dateStr);//        }////        System.out.println("========");//        List<String> dateStrs2 = listDateStrs("2020-12-01", "2020-12-13", DAY);//        for (String dateStr : dateStrs2) {//            System.out.println(dateStr);//        }
        System.out.println(getThreeMonth(new Date()));        System.out.println(getNowDay(new Date()));        System.out.println(getNowYear(new Date()));    }}  

标签:12,return,String,日期,static,工具,public
From: https://www.cnblogs.com/liulsky/p/17447716.html

相关文章

  • 计算开始日期结束日期相差多少年月日
    1/**2*计算2个日期之间相差的相差多少年月日3*比如:2011-02-02到2017-03-02相差6年,1个月,0天4*@paramfromDateYYYY-MM-DD5*@paramtoDateYYYY-MM-DD6*@return年,月例如1年1个月7*/8privateStringdayComparePrecise(StringfromD......
  • 5.5. Java并发工具类(如CountDownLatch、CyclicBarrier等)
    5.5.1CountDownLatchCountDownLatch是一个同步辅助类,它允许一个或多个线程等待,直到其他线程完成一组操作。CountDownLatch有一个计数器,当计数器减为0时,等待的线程将被唤醒。计数器只能减少,不能增加。示例:使用CountDownLatch等待所有线程完成任务假设我们有一个任务需要三个子......
  • [SprigMVC/SpringBoot] JSON序列化专题之日期序列化问题:接口报Jackson框架错误“Inva
    0序言今日工作中遇到的一个bug。各位看官且听我娓娓道来。1问题描述请求接口时,service层返回到controller层的数据结构为List<Map<Strig,Object>>,而Map中存在一个key=date,valuetype=java.time.LocalDate的Entry,且日志报如下错误:InvalidDefinitionException:Java8date......
  • GZIPUtils工具类
    GZIPUtils.java工具类importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.util.zip.GZIPInputStream;importjava.util.zip.GZIPOutputStream;importorg.apache.commons.codec.binary.StringUtils;pub......
  • 开源.NetCore通用工具库Xmtool使用连载 - 发送短信篇
    【Github源码】《上一篇》介绍了Xmtool工具库中的发送邮件类库,今天我们继续为大家介绍其中的发送短信类库。发送短信就像发送邮件一样,在软件系统中使用非常普遍,甚至比发送邮件还要常见,有些甚至是软件标配功能;例如现在的短信验证码登录、通过短信找回密码等等。发送短信需要......
  • 源代码管理工具介绍博客
    源代码管理工具是用于跟踪和管理软件开发过程中的源代码的工具。它们提供了一种协作和版本控制的方法,使团队成员能够同时开发和修改代码,同时记录和跟踪代码的变更历史。以下是几个常见的源代码管理工具:Git:Git是目前最流行的分布式版本控制系统。它具有高效的分支和合并......
  • SoapUI、Jmeter、Postman三种接口测试工具的比较
    1. 用例组织方式首先是用例组织方式的不同,不同的目录结构与组织方式代表不同工具的测试思想,学习一个测试工具应该首先了解其组织方式。SoapUI的组织方式如下图,最上层是WorkSpace,每个窗口只可以打开一个WorkSpace(这是一个xml文件),每个Project也是一个单独的xml文件(为了协同工作,......
  • linux 文本分析工具---awk命令
    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本:awk、nawk和gawk,未作特别说明,一般指gawk,gawk是AWK的GNU......
  • 【2023 · CANN训练营第一季】——应用开发深入讲解——模型转换的ATC工具
    前言: 做一个推理应用,首先从模型转换开始(当然先得选好一个合适的模型)。在昇腾平台做模型推理,需要将Caffe,TensorFlow等开源框架网络模型转换成Davinci架构专用模型(OM格式)。昇腾张量编译器(AscendTensorCompiler,简称ATC)是异构计算架构CANN体系下的模型转换工具,模型转换过程中,ATC会进......
  • Linux网络性能评估工具iperf 、CHARIOT测试网络吞吐量
    网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理、网络存在安全漏洞等原因,都会导致网络带宽利用率不高。要找到网络带宽利用率不高的原因,就需要对网络传输进行监控,此时就需要用到一些网络性能评估工具,而Iperf就是这样一款......