感谢https://www.cnblogs.com/Steven5007/p/12723683.html得代码参考改动如下
@Data
public class DateRange {
private Date begin;
private Date end;
public String toString ( ) {
return "{" + new SimpleDateFormat ( RoomConst. DATE_TIME) . format ( begin) + " ," + new SimpleDateFormat ( RoomConst. DATE_TIME) . format ( end) + "}" ;
}
}
public class DayUtil {
private DayUtil ( ) {
}
public static void main ( String[ ] a) {
Object o = splitDateRangeByDay ( "2020-06-09 16:00:00" , "2020-06-11 12:00:00" ) ;
System. out. println ( JSON. toJSONString ( o) ) ;
}
public static List< DateRange> splitDateRangeByDay ( String b, String e) {
Date begin = DateUtil. parse ( b, RoomConst. DATE_TIME) ;
Date end = DateUtil. parse ( e, RoomConst. DATE_TIME) ;
String sb = b. substring ( 0 , 10 ) ;
String se = e. substring ( 0 , 10 ) ;
if ( sb. equals ( se) ) {
DateRange r = new DateRange ( ) ;
r. setBegin ( begin) ;
r. setEnd ( end) ;
return Lists. newArrayList ( r) ;
}
long time = end. getTime ( ) - begin. getTime ( ) ;
long hours = time / ( 60 * 60 * 1000 ) ;
if ( time % ( 60 * 60 * 1000 ) > 0 ) {
hours += 1 ;
}
if ( hours <= 24 ) {
List< DateRange> result = new ArrayList < > ( 2 ) ;
DateRange r = new DateRange ( ) ;
r. setBegin ( begin) ;
r. setEnd ( DateUtil. parse ( sb + " 23:59:59" , RoomConst. DATE_TIME) ) ;
result. add ( r) ;
DateRange r2 = new DateRange ( ) ;
r2. setBegin ( DateUtil. parse ( se + " 00:00:00" , RoomConst. DATE_TIME) ) ;
r2. setEnd ( end) ;
result. add ( r2) ;
return result;
}
Calendar calendar = Calendar. getInstance ( ) ;
calendar. setTime ( begin) ;
List< DateRange> list = Lists. newArrayList ( ) ;
DateRange range = new DateRange ( ) ;
range. setBegin ( begin) ;
while ( true ) {
calendar. add ( Calendar. DAY_OF_YEAR, 1 ) ;
if ( calendar. getTime ( ) . after ( end) ) {
range. setEnd ( end) ;
list. add ( range) ;
break ;
}
calendar. set ( Calendar. HOUR_OF_DAY, 0 ) ;
calendar. set ( Calendar. MINUTE, 0 ) ;
calendar. set ( Calendar. SECOND, 0 ) ;
calendar. set ( Calendar. MILLISECOND, 0 ) ;
Date tmpBeginTime = calendar. getTime ( ) ;
calendar. add ( Calendar. SECOND, - 1 ) ;
range. setEnd ( calendar. getTime ( ) ) ;
list. add ( range) ;
range = new DateRange ( ) ;
range. setBegin ( tmpBeginTime) ;
calendar. add ( Calendar. SECOND, + 1 ) ;
}
return list;
}
}