java localdate,date 時間最大連續天數
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.stream.Collectors;
public class DateUtils {
public static final String DAY_FORMAT = "yyyy-MM-dd";
public static Date getDateByPattern(String time, String pattern) {
if (time == null || time.isEmpty()) {
return null;
}
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.ENGLISH);
sdf.setLenient(false);
return sdf.parse(time);
} catch (Exception ex) {
// log.error
return null;
}
}
public static Date addDays(Date time, Integer day) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cd = Calendar.getInstance();
cd.setTime(time);
cd.add(Calendar.DATE, day);
return getDateByPattern(sdf.format(cd.getTime()), DAY_FORMAT);
} catch (Exception ex) {
//log.error("日期增加自然天出錯:{}", ex);
return null;
}
}
public static int continuousDayDate(List<Date> dateList) {
if (dateList == null || dateList.isEmpty()) {
//log.error("參數有誤,連續天數爲0 dayList{}" , dateList);
return 0;
}
List<LocalDate> datetimeList = dateList.stream()
.map(e -> LocalDateTime.ofInstant(e.toInstant(), ZoneId.systemDefault()).toLocalDate())
.sorted(LocalDate::compareTo)
.collect(Collectors.toList());
return continuousDayLocalDate(datetimeList);
}
public static int continuousDayLocalDate(List<LocalDate> dateList) {
if (dateList == null || dateList.size() == 0) {
return 0;
}
dateList = dateList.stream().filter(Objects::nonNull).sorted(LocalDate::compareTo).collect(Collectors.toList());
int maxContinuousDay = 1;
int continuousDay = 1;
for (int i = 1; i < dateList.size(); i++) {
LocalDate date = dateList.get(i);
LocalDate previousDate = dateList.get(i - 1);
if (date.minusDays(1).equals(previousDate)) {
continuousDay++;
if (continuousDay > maxContinuousDay) {
maxContinuousDay = continuousDay;
}
} else {
continuousDay = 1;
}
}
return maxContinuousDay;
}
public static void main(String[] args) {
List<Date> dates = new ArrayList<>();
Date date = new Date();
dates.add(addDays(date, 2));
dates.add(addDays(date, 3));
System.out.println(continuousDayDate(dates));
List<LocalDate> list = new ArrayList<>();
list.add(LocalDate.now());
list.add(LocalDate.now().plusDays(1));
list.add(LocalDate.now().plusDays(2));
System.out.println(continuousDayLocalDate(list));
}
}