需要、現在は1日を通して使用されるものがあり、彼が毎日使用する時間を計算する必要があります
期間エンティティ:
import lombok.Data; import java.text.SimpleDateFormat; import java.util.Date; / ** *期間 * / @Data public class DateRange { private Date begin; // 開始時刻 private Date end; // 終了時刻 / / だけで簡単に鑑賞するために、実際の開発ではなく、このゴースト パブリック文字列のtoString(){ リターン "{" + 新新のSimpleDateFormat( "YYYY-MM-DD HH:MM:SS")。フォーマット(開始)+ "" + 新新 SimpleDateFormat( "yyyy-MM-dd HH:mm:ss")。Format(end)+ "}" ; } }
計算方法、両方の方法が行います
/ ** *添小時間计算、分隔 * * @param begin * @param end * @return * / public static List <DateRange> splitDateRangeByHour(Date begin、Date end){ System.out.println( "添小时切割" ) ; カレンダーカレンダー = Calendar.getInstance(); calendar.setTime(begin); リスト <DateRange> list = Lists.newArrayList(); DateRange範囲 = 新しいDateRange(); range.setBegin(begin); ながら(true){ calendar.add(Calendar.HOUR_OF_DAY、 1 ); if (calendar.getTime()。after(end)){ range.setEnd(end); list.add(range); break ; } if(calendar.get( Calendar.HOUR_OF_DAY)== 23 ){ calendar.set(Calendar.MINUTE、 59 ); calendar.set(Calendar.SECOND、 59 ); calendar.set(Calendar.MILLISECOND、 0 ); range.setEnd(calendar.getTime( )); list.add(range); // 翌日を計算して新しい期間を作成する calendar.add(Calendar.SECOND、1 ); range = new DateRange(); range.setBegin(calendar.getTime()); continue ; } } return list; } / ** *日ごとの計算で区切られる(高効率、のみ1日以上問題がある) * * @param begin * @param end * @return * / public static List <DateRange> splitDateRangeByDay(Date begin、Date end){ System.out.println( "Cut by day" ); long時間= end.getTime()- begin.getTime(); if(time == 0 ){ return Lists.newArrayList(); } 長時間 =時間/(60 * 60 * 1000 ); if(時間%(60 * 60 * 1000)> 0 ){ 時間 + = 1 ; } if(hours <= 24 ){ return splitDateRangeByHour(begin、end); } Calendar calendar = Calendar.getInstance(); calendar.setTime(begin); リスト <DateRange>リスト= Lists.newArrayList(); DateRange範囲= 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); 休憩; } calendar.set(Calendar.HOUR_OF_DAY、 0 ); calendar.set(Calendar.MINUTE、 0 ); calendar.set(Calendar.SECOND、 0 ); calendar.set(Calendar.MILLISECOND、 0 ); // 今出発 日tmpBeginTime = (;)calendar.getTime //が最終二日目の計算 Calendar.add(Calendar.SECOND、-1 ;) range.setEnd(calendar.getTime()); リスト.add(range); // 新しい時間 範囲を作成 range = new DateRange(); range.setBegin(tmpBeginTime); // 今日に戻る calendar.add(Calendar.SECOND、+1 ); } 戻りリスト; }
テストと結果
// 天天 public static void main(String [] args)はParseExceptionをスローします{ Date begin = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss")。parse( "2019-02-27 08:00:12 " ); 日付の終わり = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss")。parse( "2019-03-03 12:01:08" ); リスト <DateRange> dateRanges = splitDateRangeByDay(begin、end); System.out.println(dateRanges); } 输出 2019-02-28 08:00:12 2019-03-01 00:00:00 2019-03-02 00:00:00 2019-03-03 00:00:00 2019-03-04 00:00 :00 1111 [{2019-02-27 08:00:12、2019-02-27 23:59:59}、{2019-02-28 00:00:00、2019-02-28 23:59:59}、{2019 -03-01 00:00:00、2019-03-01 23:59:59}、{2019-03-02 00:00:00、2019-03-02 23:59:59}、{2019-03 -03 00:00 : 00、2019-03-03 12:01:08 }] // 押されたときに public static void main(String [] args)がParseExceptionをスローします{ Date begin = new SimpleDateFormat( "yyyy-MM-dd HH :mm:ss ")。parse(" 2019-02-27 08:00:12 " ); 日付の終わり = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss")。parse( "2019-03-03 12:01:08" ); リスト <DateRange> System.out.println(dateRanges); } 出力 2019-02-27 09:00:12 2019-02-27 10:00:12 2019-02-27 11:00:12 2019-02-27 12:00:12 2019-02-27 13:00 :12 2019-02-27 14:00:12 2019-02-27 15:00:12 2019-02-27 16:00:12 2019-02-27 17:00:12 2019-02-27 18:00 :12 2019-02-27 19:00:12 2019-02-27 20:00:12 2019-02-27 21:00:12 2019-02-27 22:00:12 2019-02-27 23:00 :12 2019-02-28 01:00:00 2019-02-28 02:00:00 2019-02-28 03:00:00 2019-02-28 04:00:00 2019-02-28 05:00 :00 2019-02-28 06:00:00 2019-02-28 07:00:00 2019-02-28 08:00:00 2019-02-28 10:00 :00 2019-02-28 09:00:00 2019-03-01 12:00:00 2019-02-28 11:00:00 2019-02-28 12:00:00 2019-02-28 13:00:00 2019-02-28 14:00:00 2019-02-28 15:00:00 2019-02-28 16:00:00 2019-02-28 17:00:00 2019-02-28 18:00:00 2019-02-28 19:00:00 2019-02-28 20:00:00 2019-02-28 21:00:00 2019-02-28 22:00:00 2019-02-28 23:00:00 2019-03-01 01:00:00 2019-03-01 02:00:00 2019-03-01 03:00:00 2019-03-01 04:00:00 2019-03-01 05:00:00 2019-03-01 06:00:00 2019-03-01 07:00:00 2019-03-01 08:00:00 2019-03-01 09:00:00 2019-03-01 10:00:00 2019-03-01 11:00:00 2019-03-01 14:00:00 2019-03-01 13:00:00 2019-03-01 15:00:00 2019-03-01 16:00:00 2019-03-01 17:00:00 2019-03-01 18:00:00 2019-03-01 19:00:00 2019-03-01 20:00:00 2019-03-01 21:00:00 2019-03-01 22:00:00 2019-03-01 23:00:00 2019-03-02 01:00:00 2019-03-02 02:00:00 2019-03-02 03:00:00 2019-03-02 04:00:00 2019-03-02 05:00:00 2019-03-02 06:00:00 2019-03-02 07:00:00 2019-03-02 08:00:00 2019-03-02 09:00:00 2019-03-02 10:00:00 2019-03-02 11:00:00 2019-03-02 12:00:00 2019-03-02 13:00:00 2019-03-02 14:00:00 2019-03-02 15:00:00 2019-03-02 16:00:00 2019-03-02 17:00:00 2019-03-02 18:00:00 2019-03-02 19:00:00 2019-03-02 20:00:00 2019-03-02 21:00:00 2019-03-02 22:00:00 2019-03-02 23:00:00 2019-03-03 01:00:00 2019-03-03 02:00:00 2019-03-03 03:00:00 2019-03-03 04:00:00 2019-03-03 05:00:00 2019-03-03 06:00:00 2019-03-03 07:00:00 2019-03-03 08:00:00 2019-03-03 09:00:00 2019-03-03 10:00:00 2019-03-03 11:00:00 2019-03-03 12:00:00 2019-03-03 13:00:00 1111 [{2019-02-27 08:00:12、2019-02-27 23:59:59}、{2019-02-28 00:00:00、2019-02-28 23:59:59}、{2019- 03-01 00:00:00、2019-03-01 23:59:59}、{2019-03-02 00:00:00、2019-03-02 23:59:59}、{2019-03- 03 00:00:00、2019-03-03 12:01:08}]