package ejercicio80;
/**
*
* @author juan
*/
public class Fecha {
private int dia;
private int mes;
private int anyo;
/**
* Constructor por defecto genera fechas al 1 del 1 del 2013
*/
public Fecha() {
this.dia = 1;
this.mes = 1;
this.anyo = 2013;
}
/**
* Constructor al que les pasamos tres parámetros si la fecha es posible se
* le asigna en caso de fecha incorrecta inicializa el objeto al 1-1-2013
*
* @param dia representa el día de la fecha completa
* @param mes mes de la fecha
* @param anyo año de la fecha
*/
public Fecha(int dia, int mes, int anyo) {
if (comprobarFecha(dia, mes, anyo)) {
this.dia = dia;
this.mes = mes;
this.anyo = anyo;
} else {
this.dia = 1;
this.mes = 1;
this.anyo = 2013;
}
}
/**
* Permite asignar día, mes y anyo al objeto fecha. Si la asignación es
* correcta devuelve true, en caso contrario false.
*
* @param dia día del año que se quiere asignar
* @param mes mes del año en formato numérico
* @param anyo año en formato numérico
* @return true si la fecha asignada es posible, false en caso contrario
*/
public boolean asignate(int dia, int mes, int anyo) {
boolean retorno = false;
if (comprobarFecha(dia, mes, anyo)) {
this.dia = dia;
this.mes = mes;
this.anyo = anyo;
retorno = true;
}
return retorno;
}
public int getAnyo() {
return anyo;
}
public void setAnyo(int anyo) {
if (comprobarFecha(dia, mes, anyo)) {
this.anyo = anyo;
}
}
public int getDia() {
return dia;
}
public void setDia(int dia) {
if (comprobarFecha(dia, mes, anyo)) {
this.dia = dia;
}
}
public int getMes() {
return mes;
}
/**
* si el mes es correcto (teniendo en cuenta ya el día y el año que tiene
* asignada la fecha) se cambiará el mes por el que pasamos como parámetro
*
* @param mes representa el NUEVO mes que queremos asignar a la fecha
*/
public void setMes(int mes) {
if (comprobarFecha(dia, mes, anyo)) {
this.mes = mes;
}
}
/**
* Método para comprobar si un año es bisiesto.
*
* @param num año que queremos comprobar si es bisiesto o no
* @return Devuelve true si el año es bisiesto y false en caso contrario
*/
private boolean esBisiesto(int num) {
return ((num % 4 == 0 && num % 100 != 0) || (num % 500 == 0));
}
/**
* Comprueba si la fecha dada es correcta, teniendo en cuenta, los días de
* cada mes y los años bisiestos.
*
* @param dia
* @param mes
* @param anho
* @return True si la fecha es correcta y false en caso contrario
*/
private boolean comprobarFecha(int dia, int mes, int anho) {
boolean correcta = true;
switch (mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if (dia > 31 || dia < 1) {
correcta = false;
}
break;
case 4:
case 6:
case 9:
case 11:
if (dia > 30 || dia < 1) {
correcta = false;
}
break;
case 2:
if (dia > 29 || !(dia > 0 && (dia < 29) || (dia == 29 && esBisiesto(anho)))) {
correcta = false;
}
break;
default:
correcta = false;
}
return correcta;
}
/**
* Devuelve el mes en formato texto: Enero,..
*
* @return
*/
private String mesLetra() {
String retorno;
//A falta de ver enumeraciones
//String [] Meses = {"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
//return Meses[mes-1];
switch (mes) {
case 1:
retorno = "Enero";
break;
case 2:
retorno = "Febrero";
break;
case 3:
retorno = "Marzo";
break;
case 4:
retorno = "Abril";
break;
case 5:
retorno = "Mayo";
break;
case 6:
retorno = "Junio";
break;
case 7:
retorno = "Julio";
break;
case 8:
retorno = "Agosto";
break;
case 9:
retorno = "Septiembre";
break;
case 10:
retorno = "Octubre";
break;
case 11:
retorno = "Noviembre";
break;
case 12:
retorno = "Diciembre";
break;
default:
throw new AssertionError();
}
return retorno;
}
/**
* Mostrar la fecha en formato 1-Enero-2010 p.e.
*/
public void imprimete() {
System.out.println(dia + "-" + this.mesLetra() + "-" + anyo);
}
/**
* Mostrar la fecha en formato 1-1-2010 p.e.
*
* @param num
*/
public void imprimete(int num) {
System.out.println(dia + "-" + mes + "-" + anyo);
}
public String getFecha() {
return (dia + "-" + this.mesLetra() + "-" + anyo);
}
public String getFecha(int num) {
return (dia + "-" + mes + "-" + anyo);
}
public String incrementate(int dias) {
int resto, cociente;
cociente = dias / 365;
anyo += cociente;
resto = dias % 365;
if (resto > 31) {
cociente = resto / 31;
mes += cociente;
dia += resto % 31;
} else {
dia += resto;
}
if (dia > 31) {
mes += 1;
dia -= 31;
}
if (mes > 12) {
anyo += 1;
mes = mes % 12;
}
return getFecha();
}
public void incrementate2(int d) {
for (int i = 1; i <= d; i++) {
dia++;
switch (mes) {
case 1: // meses de 31 dias
case 3:
case 5:
case 7:
case 8:
case 10:
if (dia == 32) {
mes++;
dia = 1;
}
break;
case 12:
if (dia == 32) {
mes = 1;
dia = 1;
anyo++;
}
break;
case 4: // meses de 30 dias
case 6:
case 9:
case 11:
if (dia == 31) {
mes++;
dia = 1;
}
break;
case 2: // para anhos bisiestos
if (this.esBisiesto(this.anyo)) {
if (dia == 30) {
mes++;
dia = 1;
}
} else {
if (dia == 29) {
mes++;
dia = 1;
}
}
break;
}
}
}
public String incrementate3(int diasAIncrementar) {
int diasRestanMes = 0;
int diasMes = 0;
do {
switch (mes) {
case 1: // meses de 31 dias
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
diasMes = 31;
break;
case 4: // meses de 30 dias
case 6:
case 9:
case 11:
diasMes = 30;
case 2: // para anhos bisiestos
if (this.esBisiesto(anyo)) {
diasMes = 29;
} else {
diasMes = 28;
}
break;
}
diasRestanMes = diasMes - dia;
if (diasRestanMes >= diasAIncrementar) {
dia += diasAIncrementar;
} else {
dia = 1;
++mes;
if (mes == 13) {
anyo++;
mes = 1;
}
}
diasAIncrementar -= (diasRestanMes + 1);
} while (diasAIncrementar > 0);
return getFecha();
}
}
Este blog está dedicado a la recolección de información relacionada con las nuevas tecnologías ( tecnoloxía xa), especialmente, con las vinculadas a la informática. La idea es centralizar y compartir la información y cada manual o tutorial que voy recolectando para las clases tanto de administración de sistemas como de explotación de sistemas informáticos de modo que estén disponibles para alumnos y resto de interesados. (IES A Carballeira, Ourense)
No hay comentarios:
Publicar un comentario