Created
March 19, 2013 17:31
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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