Javaは月ごとに時間を分けて構想と方法を実現します。

3316 ワード

前言
時には私達はしばらくの時間を得て、月によってこの時間を区切ります。例えば、開始時間は2020/07/15から2021/07/05までは月ごとにデータをグループ化して展示するので、この時間を以下のように分ける必要があります。
2020/07/15~2020/08/01
2020/08/01~2020/09/01
2020/09/01~2020/10/01

2021/06/01~2021/07/01
2021/07/01~2021/07/05
一、知識点
時間を分類するには主にJavaのCalendarが使われていますが、一般的に時間を処理する必要がある場合はこの類が必要です。Calendarという種類の設定を使用してもよく、またはカレンダー内の時間を取得してもよく、いくつかの一般的なAPIは以下のように示されている。
初期化Calendarオブジェクト

Calendar calendar = Calendar.getInstance();
カレンダーの時間を設定します。

Date time = new Date;
calendar.setTime(time);
カレンダーの時間(年月日)を取得します。

calendar.set(Calendar.YEAR, 2021); //  
calendar.add(Calendar.MONTH, 1); //  
calendar.set(Calendar.DAY_OF_MONTH, 1); //  
二、考え方分析
大体の実現の考え方は、開始時間から、アキュムレータ方式で月ごとに増加し、現在の時間が終了時間より大きい場合は、重畳を停止するということです。
なお、現在の時間が終了時間よりも大きい場合でも、終了時間を結果セットに追加する必要があります。最後の時間帯は月の初めから終わりまでです。
三、実現案
実現の方式は思考と同じです。いくつかのコメントはコードに書いてあります。下の図のように。

/**
 *           
 *
 * @param startTime          (  )
 * @param endTime            (  )
 */
public static List<Long> getIntervalTimeByMonth(Date startTime, Date endTime) {
    List<Long> dateList = new ArrayList<>();
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(startTime);
    dateList.add(calendar.getTimeInMillis());
    while (calendar.getTimeInMillis() < endTime.getTime()) {
        //    
        calendar.add(Calendar.MONTH, 1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.DATE, -1);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        if(calendar.getTimeInMillis() >= endTime.getTime()){
            dateList.add(endTime.getTime());
            break;
        }
        //    
        calendar.add(Calendar.DATE, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        dateList.add(calendar.getTimeInMillis());
    }
    return dateList;
}
テストコードは以下の通りです。

public static void main(String[] args) throws ParseException {
    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date beginDate = sdf.parse("2020-07-15");
    Date endDate = sdf.parse("2021-07-05");
    List<Long> endDateList = DateUtil.getIntervalTimeByMonth(beginDate, endDate);
    for (int i = 0; i < endDateList.size(); i++) {
        Long beginStr = endDateList.get(i);
        String begin1 = sdf1.format(new Date(beginStr));
        System.out.println(" " + i + "     :" + begin1);
    }
}
テストの結果は以下の通りです。

締め括りをつける
ここで、Javaについては、月ごとに時間を区切って構想と方法を実現する文章を紹介します。さらに関連するJava時間は月ごとに内容を分けます。以前の文章を検索してください。または、次の関連記事を引き続きご覧ください。これからもよろしくお願いします。