时间工具类(获取日期周,日期月的开始时间和结束时间)
需要lombok依赖
package com.linkip.sentiment.util.date;
import com.whos.sa.analysis.Analysis;
import lombok.Data;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author: craywen
* @date: 2020-06-30 18:02
* @desc:
*/
public class DateListUtils {
public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
@Data
public static class DateVo {
private String startDate;
private String endDate;
private DateVo (String startStr, String endStr){
this.startDate=startStr;
this.endDate=endStr;
}
private DateVo (){
}
}
/**
* 日期段内获取月开始时间结束时间
* @param startDate
* @param endDate
* @return
*/
public static List<DateVo> getBetweenMonths(String startDate,String endDate) {
List<DateVo> list = null;
try {
list = new ArrayList<DateVo>();
String firstDay = "";
String lastDay = "";
Date d1 = sdf.parse(startDate);// 定义起始日期
Date d2 =sdf.parse(endDate);// 定义结束日期
Calendar dd = Calendar.getInstance();// 定义开始日期实例
Calendar c = Calendar.getInstance();//结束日期
dd.setTime(d1);// 设置日期起始时间
c.setTime(d2);
Calendar cale = Calendar.getInstance();
int startDay = d1.getDate();
int endDay = d2.getDate();
DateVo keyValueForDate = null;
while (dd.getTime().before(d2)) {
// 判断是否到结束日期
keyValueForDate = new DateVo();
cale.setTime(dd.getTime());
if(dd.getTime().equals(d1)){
if((dd.get(Calendar.MONTH) + 1)==(c.get(Calendar.MONTH) + 1)&&(dd.get(Calendar.YEAR) + 1)==(c.get(Calendar.YEAR) + 1)){
if(startDay==1)
{
cale.set(Calendar.DATE,endDay-startDay+1 );
}else{
cale.set(Calendar.DATE,endDay);
}
}else{
cale.set(Calendar.DAY_OF_MONTH, dd
.getActualMaximum(Calendar.DAY_OF_MONTH));
}
lastDay = sdf.format(cale.getTime());
keyValueForDate.setStartDate(sdf.format(d1));
keyValueForDate.setEndDate(lastDay);
}else if(dd.get(Calendar.MONTH) == d2.getMonth() && dd.get(Calendar.YEAR) == c.get(Calendar.YEAR)){
cale.set(Calendar.DAY_OF_MONTH,1);//取第一天
firstDay = sdf.format(cale.getTime());
keyValueForDate.setStartDate(firstDay);
keyValueForDate.setEndDate(sdf.format(d2));
}else {
cale.set(Calendar.DAY_OF_MONTH,1);//取第一天
firstDay = sdf.format(cale.getTime());
cale.set(Calendar.DAY_OF_MONTH, dd
.getActualMaximum(Calendar.DAY_OF_MONTH));
lastDay = sdf.format(cale.getTime());
keyValueForDate.setStartDate(firstDay);
keyValueForDate.setEndDate(lastDay);
}
list.add(keyValueForDate);
dd.add(Calendar.MONTH, 1);// 进行当前日期月份加1
}
if(endDay<=startDay){
keyValueForDate = new DateVo();
cale.setTime(d2);
cale.set(Calendar.DAY_OF_MONTH,1);//取第一天
firstDay = sdf.format(cale.getTime());
keyValueForDate.setStartDate(firstDay);
keyValueForDate.setEndDate(sdf.format(d2));
list.add(keyValueForDate);
}
} catch (ParseException e) {
return null;
}
return list;
}
/**
* 获取两个日期之间的所有日期
* @param startDate
* @param endDate
* @return
* @throws ParseException
*/
public static List<DateVo> getBetweenDates(String startDate, String endDate) throws ParseException {
Date start = sdf.parse(startDate);//定义起始日期
Date end = sdf.parse(endDate);//定义结束日期
List<DateVo> result = new ArrayList<DateVo>();
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(start);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
while (tempStart.before(tempEnd) || tempStart.equals(tempEnd)) {
DateVo dateVo= new DateVo();
dateVo.setStartDate(sdf.format(tempStart.getTime()));
dateVo.setEndDate(sdf.format(tempStart.getTime()));
result.add(dateVo);
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
return result;
}
/**
* 获取两个日期之间的所有日期
* @param startDate
* @param endDate
* @return
* @throws ParseException
*/
public static List<DateVo> getBetweenWeeks(String startDate, String endDate) throws ParseException{
List<String> listWeekOrMonth = new ArrayList<String>();
List<DateVo> dateVoList = new ArrayList<DateVo>();
Date sDate = sdf.parse(startDate);
Calendar sCalendar = Calendar.getInstance();
sCalendar.setFirstDayOfWeek(Calendar.MONDAY);
sCalendar.setTime(sDate);
Date eDate = sdf.parse(endDate);
Calendar eCalendar = Calendar.getInstance();
eCalendar.setFirstDayOfWeek(Calendar.MONDAY);
eCalendar.setTime(eDate);
boolean bool =true;
while(sCalendar.getTime().getTime()<eCalendar.getTime().getTime()){
if(bool||sCalendar.get(Calendar.DAY_OF_WEEK)==2||sCalendar.get(Calendar.DAY_OF_WEEK)==1){
listWeekOrMonth.add(sdf.format(sCalendar.getTime()));
bool = false;
}
sCalendar.add(Calendar.DAY_OF_MONTH, 1);
}
listWeekOrMonth.add(sdf.format(eCalendar.getTime()));
if(listWeekOrMonth.size()%2!=0){
listWeekOrMonth.add(sdf.format(eCalendar.getTime()));
}
for (int i = 0; i < listWeekOrMonth.size()-1; i++) {
if(i%2==0){
DateVo dateVo= new DateVo();
dateVo.setStartDate(listWeekOrMonth.get(i));
dateVo.setEndDate(listWeekOrMonth.get(i+1));
dateVoList.add(dateVo);
}
}
return dateVoList;
}
public static void main(String[] args) throws ParseException {
System.out.println("=======month=======");
List<DateVo> betweenMonths = getBetweenMonths("2019-06-13", "2020-07-18");
for (DateVo betweenDate : betweenMonths) {
System.out.println(betweenDate.getStartDate()+"===="+betweenDate.getEndDate());
}
System.out.println("=======week=======");
List<DateVo> betweenWeeks = getBetweenWeeks("2020-07-01", "2020-07-09");
for (DateVo betweenDate : betweenWeeks) {
System.out.println(betweenDate.getStartDate()+"===="+betweenDate.getEndDate());
}
System.out.println("======day========");
List<DateVo> betweenDates = getBetweenDates("2020-06-10", "2020-07-09");
for (DateVo betweenDate : betweenDates) {
System.out.println(betweenDate.getStartDate()+"===="+betweenDate.getEndDate());
}
}
}