Skip to content

Instantly share code, notes, and snippets.

@ramayac
Created March 19, 2013 17:31
Show Gist options
  • Save ramayac/5198222 to your computer and use it in GitHub Desktop.
Save ramayac/5198222 to your computer and use it in GitHub Desktop.
Simple ejemplo de cómo hacer cálculo de días corrientes y laborales.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Calculo {
public static final String formatofecha = "dd/MM/yyyy";
public static final String letraescape = "x";
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
SimpleDateFormat df = new SimpleDateFormat(formatofecha); // día mes año
df.setLenient(false);
try {
do {
String fechap = ask(scanner, "FECHA DE INICIO: (" + formatofecha + " o '"
+ letraescape + "' para salir) : ");
String diasp = ask(scanner, "DIAS : ");
if (fechap != null && diasp != null) {
try {
Date fecha = df.parse(fechap);
Integer dias = Integer.parseInt(diasp);
/* Para depurar más fácil
* System.out.println("Cadena original: " + fechap);
* System.out.println("Fecha interpretada: " +
* date.toString()); System.out.println();
*/
System.out.println("Cálculo de " + dias + " dias para la fecha: "
+ fecha.toString());
System.out.println();
Date fecha1 = calculateEndDate(fecha, dias);
Date fecha2 = calculateWorkedEndDate(fecha, dias);
System.out.println(dias + " días calendario: "
+ fecha1.toString());
System.out.println(dias + " días laborados: "
+ fecha2.toString());
} catch (NumberFormatException ne) {
System.out.println("ERROR: mal formato \"" + diasp
+ "\"");
} catch (ParseException pe) {
System.out.println("ERROR: mal formato \"" + fechap
+ "\"");
}
} else {
;
}
} while (true);
} catch (Exception e) {
;
}
}
public static String ask(final Scanner scanner, final String copy) {
System.out.print(copy);
String parse = scanner.next();
if (parse != null)
parse = parse.trim();
if (parse == null || parse.length() == 0)
return null;
if (parse.equalsIgnoreCase(letraescape))
return null;
return parse;
}
public static Date calculateWorkedEndDate(Date startDate, int duration) {
Calendar startCal = Calendar.getInstance();
startCal.setTime(startDate);
for (int i = 1; i < duration; i++) {
startCal.add(Calendar.DAY_OF_MONTH, 1);
while (startCal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
|| startCal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
startCal.add(Calendar.DAY_OF_MONTH, 1);
}
}
return startCal.getTime();
}
public static int calculateWorkDuration(Date startDate, Date endDate) {
Calendar startCal = Calendar.getInstance();
startCal.setTime(startDate);
Calendar endCal = Calendar.getInstance();
endCal.setTime(endDate);
int workDays = 0;
if (startCal.getTimeInMillis() > endCal.getTimeInMillis()) {
startCal.setTime(endDate);
endCal.setTime(startDate);
}
do {
startCal.add(Calendar.DAY_OF_MONTH, 1);
if (startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY
&& startCal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
workDays++;
}
} while (startCal.getTimeInMillis() <= endCal.getTimeInMillis());
return workDays;
}
public static Date calculateEndDate(Date startDate, int duration) {
Calendar startCal = Calendar.getInstance();
startCal.setTime(startDate);
for (int i = 1; i < duration; i++) {
startCal.add(Calendar.DAY_OF_MONTH, 1);
}
return startCal.getTime();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment