Definindo período de datas através de data de corte em Java.

Sobre:

Mais sobre Java por favor acesse: https://pt.wikipedia.org/wiki/Java_(linguagem_de_programa%C3%A7%C3%A3o).

Detalhes:

Um código pronto para quem esta precisando definir períodos entre data inicial e data final em Java com um dia de corte.

Código:

Veja o exemplo abaixo.

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package app.console.datas;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 *
 * @author paulo.uechi
 */
public class AppConsoleDatas {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        // Detalhe: o formato abaixo representa yyyy,MM,dd
        // Importante: o mes comeca a partir de 0 = janeiro
        Calendar objTst = GregorianCalendar.getInstance();
        int intDiaCorte = 1;
        for (int intCnt = 0; intCnt < 12; intCnt++){
            objTst.set(2015, intCnt, 1);
            Date objDat = objTst.getTime();
            System.out.println(intCnt + " INI - " + retornaDatas(10, retornaDia(1, intDiaCorte, objDat)));
            System.out.println(intCnt + " FIM - " + retornaDatas(10, retornaDia(2, intDiaCorte, objDat)));
            System.out.println("");
        }
    }
    
    public static Date retornaDia(int intOpt, int intDia, Date objDat) {
        Date objDtt = null;
        try {
            int intUltDia;
            int intRetDia;
            int intRetMes;
            int intRetAno;
            if (intOpt == 1) {
                Calendar objCal = GregorianCalendar.getInstance();
                if (objDat != null){
                    objCal.setTime(objDat);
                } else {
                    objCal.setTime(new Date());
                }
                objDtt = objCal.getTime();
                intUltDia = objCal.getActualMaximum(Calendar.DAY_OF_MONTH);
                if (intDia > intUltDia){
                    intRetDia = intUltDia;
                } else {
                    intRetDia = intDia;
                }
                intRetMes = (objCal.get(Calendar.MONTH)) + 1; // Corrige mês 0
                intRetAno = objCal.get(Calendar.YEAR);
                objDtt = (new SimpleDateFormat("dd/MM/yyyy")).parse(intRetDia + "/" + intRetMes + "/" + intRetAno);
            } else if (intOpt == 2) {
                Calendar objCal = GregorianCalendar.getInstance();
                if (objDat != null){
                    objCal.setTime(objDat);
                } else {
                    objCal.setTime(new Date());
                }
                objCal.add(Calendar.MONTH, +1); // Adiciona +1 mês
                objDtt = objCal.getTime();
                intUltDia = objCal.getActualMaximum(Calendar.DAY_OF_MONTH);
                if (intDia > intUltDia){
                    intRetDia = intUltDia;
                } else {
                    intRetDia = intDia;
                }
                intRetMes = (objCal.get(Calendar.MONTH)) + 1; // Corrige mês 0
                intRetAno = objCal.get(Calendar.YEAR);
                objDtt = (new SimpleDateFormat("dd/MM/yyyy")).parse(intRetDia + "/" + intRetMes + "/" + intRetAno);
                Calendar objClc = GregorianCalendar.getInstance();
                objClc.setTime(objDtt);
                // Tratamento Tira -1 dia
                objClc.add(Calendar.DAY_OF_YEAR, -1);
                objDtt = objClc.getTime();
            }
        } catch (Exception e) {
            objDtt = null;
        }
        return objDtt;
    }
    
    public static String retornaDatas(int intOptFmt, Date datObject) {
        String strRet;
        try {
            String strFmt;
            if (intOptFmt == 1) {
                strFmt = "yyyy-MM-dd HH:mm:ss";
            } else if (intOptFmt == 2) {
                strFmt = "yyyy/MM/dd HH:mm:ss";
            } else if (intOptFmt == 3) {
                strFmt = "yyyy/mm/dd HH:mm:ss";
            } else if (intOptFmt == 4) {
                strFmt = "yyyy/mm/dd";
            } else if (intOptFmt == 5) {
                strFmt = "yyyy/MM/dd";
            } else if (intOptFmt == 6) {
                strFmt = "dd-MM-yyyy HH:mm:ss";
            } else if (intOptFmt == 7) {
                strFmt = "dd/MM/yyyy HH:mm:ss";
            } else if (intOptFmt == 8) {
                strFmt = "dd/mm/yyyy HH:mm:ss";
            } else if (intOptFmt == 9) {
                strFmt = "dd/mm/yyyy";
            } else if (intOptFmt == 10) {
                strFmt = "dd/MM/yyyy";
            } else {
                strFmt = "yyyy-MM-dd HH:mm:ss";
            }
            SimpleDateFormat objFmt;
            strRet = (new SimpleDateFormat(strFmt).format(datObject));
        } catch (Exception e) {
            strRet = null;
        }
        return strRet;
    }

}

 Retorno:

Abaixo veja o retorno do código acima:

debug:
0 INI - 01/01/2015
0 FIM - 31/01/2015

1 INI - 01/02/2015
1 FIM - 28/02/2015

2 INI - 01/03/2015
2 FIM - 31/03/2015

3 INI - 01/04/2015
3 FIM - 30/04/2015

4 INI - 01/05/2015
4 FIM - 31/05/2015

5 INI - 01/06/2015
5 FIM - 30/06/2015

6 INI - 01/07/2015
6 FIM - 31/07/2015

7 INI - 01/08/2015
7 FIM - 31/08/2015

8 INI - 01/09/2015
8 FIM - 30/09/2015

9 INI - 01/10/2015
9 FIM - 31/10/2015

10 INI - 01/11/2015
10 FIM - 30/11/2015

11 INI - 01/12/2015
11 FIM - 31/12/2015

CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

Conclusão:

Este exemplo geralmente é utilizando em processos financeiros de faturamento onde por exemplo precisamos definir que o cliente “X” tem as suas faturados cobradas todo o dia “01” de cada mês.

Observações:

Lembrar que este código já esta pronto para tratar os meses que não tenham 31 dias completos no calendário.

Espero ter ajudado!

🙂