En este pequeño post voy a mostrar algunas trucos básicos para trabajar con fechas cuando estamos programando en Java. Espero que os sean útiles:
Si queremos crear un objeto Date con la fecha actual tenemos que ejecutar la sentencia:
Si lo que queremos en crear un objeto Date con una fecha determinada, digamos 31/12/2012, podemos utilizar la clase SimpleDateFormat:
También a veces tenemos que imprimir fechas en un formato determinado. Esto también se consigue mediante máscaras y la clase SimpleDateFormat. Imaginemos que tenemos un objeto Date con la fecha 31 de Diciembre de 2012. Si queremos imprimir por pantalla la fecha en el formato 31-12-2012 podemos utilizar las siguientes sentencias:
Si queremos comprobar si una fecha es mayor que otra debemos utilizar el método compareTo:
Si queremos encapsular la hora y la fecha actual en un mismo objeto podemos utilizar la clase Timestamp:
Otro objeto para trabajar con fechas puede ser el objeto Calendar. Para crear un objeto Calendar con la fecha actual utilizamos la siguiente sentencia:
A veces lo que queremos es transformar un objeto Date a Calendar. Lo que tenemos que hacer en este caso es convertirlo de la siguiente forma:
Y en otras ocasiones lo que queremos conseguir es un objeto Date a partir de un Calendar. En este caso lo debemos convertir con las siguientes sentencias:
Para inicializar un objeto Calendar con una fecha determinada sin utilizar el objeto Date:
Para calcular los días transcurridos entre dos fechas podemos utilizar el siguiente método:
Para sumar un número de días a una fecha podemos utilizar el siguiente método:
Si tenéis alguna duda sobre fechas en Java o alguna otra cuestión sobre programación podéis expresarla en los comentarios del blog.
Salu2.
Si queremos crear un objeto Date con la fecha actual tenemos que ejecutar la sentencia:
Date fechaActual = new Date();
Si lo que queremos en crear un objeto Date con una fecha determinada, digamos 31/12/2012, podemos utilizar la clase SimpleDateFormat:
SimpleDateFormat formateador = new SimpleDateFormat("yyyyMMdd"); formateador.parse("2012/12/31");
También a veces tenemos que imprimir fechas en un formato determinado. Esto también se consigue mediante máscaras y la clase SimpleDateFormat. Imaginemos que tenemos un objeto Date con la fecha 31 de Diciembre de 2012. Si queremos imprimir por pantalla la fecha en el formato 31-12-2012 podemos utilizar las siguientes sentencias:
SimpleDateFormat formateador = new SimpleDateFormat("dd-MM-yyyy"); System.out.println(formateador.format(fechaObjetoDate));
Si queremos comprobar si una fecha es mayor que otra debemos utilizar el método compareTo:
if (fechaObjetoDate1.compareTo(fechaObjetoDate2) >= 0 ) { System.out.println("La fecha 1 es posterior a la fecha 2"); }
Si queremos encapsular la hora y la fecha actual en un mismo objeto podemos utilizar la clase Timestamp:
Timestamp horaFecha = new Timestamp(System.currentTimeMillis());
Otro objeto para trabajar con fechas puede ser el objeto Calendar. Para crear un objeto Calendar con la fecha actual utilizamos la siguiente sentencia:
Calendar calendar = Calendar.getInstance();
A veces lo que queremos es transformar un objeto Date a Calendar. Lo que tenemos que hacer en este caso es convertirlo de la siguiente forma:
Calendar calendar = Calendar.getInstance(); calendar.setTime(objetoDate);
Y en otras ocasiones lo que queremos conseguir es un objeto Date a partir de un Calendar. En este caso lo debemos convertir con las siguientes sentencias:
Calendar calendar = Calendar.getInstance(); calendar.getTime();
Para inicializar un objeto Calendar con una fecha determinada sin utilizar el objeto Date:
Calendar fecha= Calendar.getInstance(); fecha.set(2011, 9, 25); // (Año, Mes, Dia). El Mes es un número menos. Enero=0, Febrero=1...
Para calcular los días transcurridos entre dos fechas podemos utilizar el siguiente método:
public static int diasTranscurridosEntre(Date fechaDesde, Date fechaHasta) { long diff = fechaHasta.getTime() - fechaDesde.getTime(); long dias = diff / (1000 * 60 * 60 * 24); return (int) dias; }Para sumar un número de meses a una fecha podemos utilizar el siguiente método:
public static Date sumarMesesAFecha(Date f, int meses) { Calendar c = Calendar.getInstance(); c.setTime(f); c.add(Calendar.MONTH, meses); return c.getTime(); }
Para sumar un número de días a una fecha podemos utilizar el siguiente método:
public static Date sumarDiasAFecha(Date f, int dias) { Calendar c = Calendar.getInstance(); c.setTime(f); c.add(Calendar.DATE, dias); return c.getTime(); }
Si tenéis alguna duda sobre fechas en Java o alguna otra cuestión sobre programación podéis expresarla en los comentarios del blog.
Salu2.
Cómo puedo obtener el lunes previo a una fecha dada¿?
ResponderEliminarEjemplo: si paso la fecha 22/11/2011, que me devuelva 21/11/2011
Gracias.
Hola buenos días.
ResponderEliminarDe los ejemplos puedes sacar la información.
Para obtener el día 22/11/2011:
Calendar fecha= Calendar.getInstance();
fecha.set(2011, 10, 22);
Date fechaD = fecha.getTime();
Para obtener el día anterior utiliza la función que pongo pasando los días en negativo:
SumarDiasAFecha(fechaD, -1).
¿Te aclara esto tu duda?
No exactamente, no sólo tiene que ser un día anterior, por ejemplo, ahora imagina que la fecha es el día 25/11/2011, la duda es: ¿Cómo puedo saber qué día es el primer lunes que precede a esta fecha?
ResponderEliminarSaludos y gracias por responder tan rápido.
Hola de nuevo.
ResponderEliminarCreo que el código que necesitas es el siguiente:
Calendar c = Calendar.getInstance();
c.set(2011,10,25);
while (c.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
c.add(Calendar.DATE, -1);
}
System.out.println(c.get(Calendar.DATE));
System.out.println(c.get(Calendar.MONTH));
System.out.println(c.get(Calendar.YEAR));
Espero haberte ayudado.
Salu2.
hola!¿ como podemos hacer para encontrar la edad de una persona apartir d ela realizacion de fecha en java
ResponderEliminarAmigo Pascu, el codigo sobre el lunes anterior nos ha salvado la vida.
ResponderEliminarMuuuuchass gracias!!!!
Como puedo validar una fecha en un metodo que por ejemplo el usuario introduce 35/13/2012 que valide que sea real ya que no hay es con 35 dias y mucho menos 13 meses y ademas que la fecha sea posterior a la fecha actual. si no es valida qe marque error al usuario y asigne la fecha actual
ResponderEliminarHola pascu !
ResponderEliminarEstoy intentado hacer una aplicacion soy principiante en esto de java...
la cuestio es que quiero hacer un calendario lunar para mi y mis amigos para pescar.
se como sacar el cilclo de la luna.
package AplicacionCicloLunar;
import java.util.*;
public class Ciclo {
public static void main(String[]args){
Calendar ciclo = Calendar.getInstance();
//Declaración de las Variables: Horas, Minutos, Dias, Mes y Año
int horas = ciclo.get(Calendar.HOUR_OF_DAY);
int minutos = ciclo.get(Calendar.MINUTE);
int mes = ciclo.get(Calendar.MONTH) + 1;
int dias = ciclo.get(Calendar.DAY_OF_MONTH);
int ano = ciclo.get(Calendar.YEAR);
//Operación para sacar el año Lunar (Epacta)
int res = ano + 1; //Hay que sumarle 1 al año
int resto = res % 19; //Dividirlo entre 19 y sacar el resto
int resto1 = resto - 1 * 11; //Al resto restarle 1 y multiplicarlo por 11
int epacta = resto1 % 30; // Ahora se divide por 30 y se le saca el resto
//Apartir de marzo hay que ir sumandole uno a cada mes
if(mes<2){
mes=0;
}else{
if(mes<13){
mes = mes-2;
}else{
System.out.println("Uff... algo va mal");
}
//Ahora hay que sumar el año epacto + el dia + el mes y si pasa de 28 dividirlo por 30
int resultado;
if (dias >= 29){
resultado = ano + dias + mes / 30;
}else{
resultado = epacta + dias + mes;
}
System.out.println(resultado); //El resultado es el dia en el que estoy del ciclo lunar
}
}
}
como podria hacer jungando con el calendario para algo parecido a esta imagen ??
http://img705.imageshack.us/img705/4624/sinttulo1pxo.jpg
No espero que me hagas el codigo pero si pudieras orientarme te estaria muy agradecido o me digas un ejemplo tipo...
"Pues deberias hacer un ciclo while con un for que haga esto o lo otro..."
Mil Gracias de antemano
Como le hago para que el mes de enero me aparezca como mes 1? es que me sale 0 y se ve asqueroso asi
ResponderEliminarComo puedo obtener unicamente el año de la fecha
ResponderEliminarHola,
ResponderEliminarGracias por la ayuda. Sólo quería decirte que donde pone:
SimpleDateFormat formateador =
new
SimpleDateFormat(
"yyyyMMdd"
);
formateador.parse(
"2012/12/31"
);
Es:
SimpleDateFormat formateador =
new
SimpleDateFormat(
"yyyyMMdd"
);
formateador.parse(
"20121231"
);
al comentario anterior.. tambien se le puede poner el ("2012/12/31") pues el formateador te lo cambiara al formato predeterminado ..
ResponderEliminarigual este comentario es de hace muchos años.. pero por si alguien como yo lo ve apenas xD xD
hola buenos dias me podrian ayudar a usar un campo de fecha de base de datos sql la vdd no soy bueno en esto voy empezando ya abri el campo en la base pero como lo ocupo desde java lo tengo como Fechainsercion por que quiero comprobar y comparar tareas con las de un dia anterior me ayudan?
ResponderEliminarde favor