/* AUTOR: d3n3k4 (Dnk!)
* WEB: http://d3n3k4.blogspot.com/
* FECHA: 24/ENERO/2011
* DESCRIPCION:
* - Clase para obtener el dia de la semana de una fecha dada.
* - Ejemplo de uso en funcion "main".
* NOTA: Este codigo es libre y puede ser usado,modificado... siempre y cuando se
* mantenga los creditos y comentarios del autor.
*/
import java.util.Scanner;
public class ClsGetDayWeek {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
String arrayDia[] = {"Lunes","Martes","Miercoles","Jueves","Viernes",
"Sabado","Domingo"};
System.out.println("Introduce la fecha, Formato: [dd/mm/aaaa]");
System.out.println("Nota: A partir del 01/01/1900 este incluido.");
System.out.print(">> ");
String inDate[] = entrada.nextLine().trim().split("/");
System.out.print("Fue/es/será: ");
System.out.println(arrayDia[getDayWeek(Integer.parseInt(inDate[0]),Integer.parseInt(inDate[1]),Integer.parseInt(inDate[2]))]);
}
/*
* Comprueba si el año pasado por parametro es bisiesto.
*/
public static boolean esBis(int pAnio){
boolean bis = false;
if (pAnio % 4 == 0 && pAnio % 100 != 0 || pAnio % 400 == 0)
bis = true;
return bis;
}
/*
* Obtienes los dias totales de un mes y año pasados por parametro.
*/
public static int getDaysMonth(int pMes,int pAnio) {
int nDays = 30;
if (pMes == 1 || pMes == 3 || pMes == 5 || pMes == 7 || pMes == 8 || pMes == 10 || pMes == 12) {
nDays = 31;
} else if ( pMes == 2 ) {
if (esBis(pAnio)){
nDays = 29;
} else {
nDays = 28;
}
}
return nDays;
}
/*
* Obtienes el dia de las semana del primer dia del año pasado por parametro.
* Se obtiene: 0-Lunes,1-Martes,...6-Domingo.
*/
public static int getFirstDayYear(int pAnio) {
int diaAnio = 0;
int indiceAnio = pAnio - 1900;
for (int indice = 1; indice <= indiceAnio; indice++) {
diaAnio++;
if (diaAnio == 7) {
diaAnio = 0;
}
}
if (indiceAnio < 13) {
int sumados = indiceAnio/5;
for (int i = 0; i < sumados; i++) {
diaAnio++;
if (diaAnio == 7) {
diaAnio = 0;
}
}
} else {
int sumados = indiceAnio/4;
for (int i = 0; i < sumados; i++) {
diaAnio++;
if (diaAnio == 7) {
diaAnio = 0;
}
}
}
return diaAnio;
}
/*
* Obtienes el dia de la semana de la fecha pasada por parametro(dia,mes,anio)
* Se obtiene: 0-Lunes,1-Martes,...6-Domingo.
*/
public static int getDayWeek(int pDia,int pMes,int pAnio) {
int numDiasMes = 0,diaSemana = getFirstDayYear(pAnio);
for (int i = 1; i < pMes;i++) {
numDiasMes += getDaysMonth(i,pAnio);
}
numDiasMes += pDia;
for (int i = 0; i < numDiasMes - 1; i++) {
diaSemana++;
if (diaSemana == 7) {
diaSemana = 0;
}
}
return diaSemana;
}
}