Javaは、開始日と終了時間に従って、使用日数と毎日の使用時間を分割します

需要、現在は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); 
        リスト <Da​​teRange> 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); 
        リスト <Da​​teRange>リスト=  Lists.newArrayList();
        DateRange範囲= new DateRange(); 
        range.setBegin(begin); 
        whiletrue ){ 
            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" ); 
        リスト <Da​​teRange> 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" ); 
        リスト <Da​​teRange> 
        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}]

 

関連リンク:https : //www.jianshu.com/p/e83e58c3e3a9

おすすめ

転載: www.cnblogs.com/Steven5007/p/12723683.html