10 enero 2019

Java: Listar fechas intermedias dentro de un rango


Ejemplo de un algoritmo que es muy usado en programación, como es el tratamiento de fechas.
Esta utilidad les permitirá obtener las fechas intermedias entre una fecha inicial y una fecha final, para cualquier formato de fecha que tengan:

yyyy/MM/dd
yyyyMMdd
yyMMdd
yyyy.MM.dd
yy MM dd


Espero les sirva


//////////////////////////////////////////

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

public class UtilFechas {

public static void main(String[] args) {

List listaResultado = listarFechasIntermedias("2018-12-28", "2019-01-03" , "yyyy-MM-dd", "yyyy MM dd");
//fecha inicial, fecha final, formato input, formato output
for(String fecha : listaResultado)
System.out.println(fecha);

}

private static List listarFechasIntermedias(String strFechaInicial, String strFechaFinal, String formatoIn, String formatoOut)
{
List listaFechasGC = listaFechas(strFechaInicial, strFechaFinal, formatoIn);
List listaFechasString = new ArrayList();

for(GregorianCalendar gc : listaFechasGC)
listaFechasString.add(formateaFecha(gc,formatoOut));

return listaFechasString;
}

private static List listaFechas(String fi, String ff, String formato ) {

List listFechas = new ArrayList();

try{
DateFormat df = new SimpleDateFormat(formato);
Date dateI = df.parse(fi);
Date dateF = df.parse(ff);
Calendar calI = Calendar.getInstance();
Calendar calF = Calendar.getInstance();
calI.setTime(dateI);
calF.setTime(dateF);
GregorianCalendar gcI = (GregorianCalendar)calI;
GregorianCalendar gcF = (GregorianCalendar)calF;
if(gcF.compareTo(gcI)>=0)
{
SimpleDateFormat fmt = new SimpleDateFormat();
GregorianCalendar temp = (GregorianCalendar) gcI.clone();
listFechas.add(gcI);
while (!fmt.format((temp).getTime()).equals(fmt.format(gcF.getTime()))) {
temp.add(GregorianCalendar.DAY_OF_MONTH, 1);
GregorianCalendar n = (GregorianCalendar) temp.clone();
listFechas.add(n);
}
}
else
{
System.out.println("Rango de fechas incorrecto.");
}

}
catch(Exception e)
{
System.out.println("Ocurrió un error : " + e.getMessage());
}
return listFechas;
}

private static String formateaFecha(GregorianCalendar f, String formato) {
SimpleDateFormat fmt = new SimpleDateFormat(formato);
return fmt.format(f.getTime());
}

}



//////////////////////////////////////////

No hay comentarios:

.NET: Ejemplo de como usar Dynamic con C#

Hola a todos, le dejo un ejemplo simple de como manejar la clase Dynamic que nos provee el paquete System.Dynamic del .Net Framework. Pa...