lunes, 17 de enero de 2011

Fechas en Java (Date, Calendar)

Me parece que no soy la única persona que se queja de como está montado todo el tema de fechas en Java. Para obtener algunas fechas hay que hacer algunas operaciones extra que "ensucian" el código.

Un día creé una clase propia Fecha para no tener que repetir el mismo código en diferentes clases. La verdad es que lo he ido montando en función de lo que iba necesitando, así que hay un poco de todo.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Fecha {

__private static String formatoDefecto = "yyyy/MM/dd HH:mm:ss";

__public static Date getDate(String sFecha) {
__ __SimpleDateFormat sdf = new SimpleDateFormat(formatoDefecto);
__ __Date fecha;
__ __try {
__ __ __fecha = sdf.parse(sFecha);
__ __} catch (ParseException e) {
__ __ __fecha = null;
__ __}

__ __return fecha;
__}

__public static Date getDate(String sFecha, String formato) {
__ __SimpleDateFormat sdf = new SimpleDateFormat(formato);
__ __Date fecha;
__ __try {
__ __ __fecha = sdf.parse(sFecha);
__ __} catch (ParseException e) {
__ __fecha = null;
__ __}
__ __return fecha;
__}

__public static String getDateStringNDaysAgo(int nDaysAgo, String formato) {
__ __SimpleDateFormat sdf = new SimpleDateFormat(formato);

__ __Calendar dateEnd = Calendar.getInstance();
__ __dateEnd.add(Calendar.DATE, nDaysAgo * (-1));

__ __return sdf.format(dateEnd.getTimeInMillis());
__}

__public static Calendar getCalendarNDaysAgo(int nDaysAgo) {
__ __Calendar dateEnd = Calendar.getInstance();
__ __dateEnd.add(Calendar.DATE, nDaysAgo * (-1));

__ __return dateEnd;
__}

__public static Calendar getCalendar(String sFecha, String formato) {
__ __Calendar calendar = Calendar.getInstance();
__ __Date dateStart = getDate(sFecha,formato);
__ __calendar.setTime(dateStart);

__ __return calendar;
__}

__public static String getToday() {
__ __Date date = Calendar.getInstance().getTime();
__ __SimpleDateFormat sdf = new SimpleDateFormat(formatoDefecto);

__ __return sdf.format(date);
__}

__public static String getToday(String formato) {
__ __ Date date = Calendar.getInstance().getTime();
__ __SimpleDateFormat sdf = new SimpleDateFormat(formato);

__ __return sdf.format(date);
__}

__public static String getDateString (Calendar cFecha) {
__ __SimpleDateFormat sdf = new SimpleDateFormat(formatoDefecto);

__ __return sdf.format(cFecha.getTimeInMillis());
__}

__public static String getDateString (Calendar cFecha, String formato) {
__ __SimpleDateFormat sdf = new SimpleDateFormat(formato);

__ __return sdf.format(cFecha.getTimeInMillis());
__}

__public static String getDateString (Date dFecha, String formato) {
__ __SimpleDateFormat sdf = new SimpleDateFormat(formato);

__ __return sdf.format(dFecha);
__}

__public static Calendar getCalendar(Date dFecha) {
__ __Calendar calendar = Calendar.getInstance();
__ __calendar.setTime(dFecha);

__ __return calendar;
__}
}

Las clases que utilzo son java.util.Date y java.util.Calendar, y para el formato java.text.SimpleDateFormat.

Date getDate(String fecha)
A partir de un String devolvemos un Date con formato. El método está overide dependiendo de si le explicito el formato o no.

Para esto utilizamos la clase SimpleDateFormat, y transformamos a Date con el método parse() de la misma.

Calendar getCalendar(Date fecha)
A partir de una fecha tipo Date devolvemos una fecha tipo Calendar. Este método también está overide dependiendo de si le explicito el formato o no.

Calendar getCalendarNDaysAgo(int ndaysAgo)
En este método obtenemos la fecha y le restamos los días especificados, y devolvemos el Calendar.

String getDateStringNDaysAgo(int ndaysAgo, format)

En este caso devolvemos un String con una fecha anterior a la actual. Así que con SimpleDateFormat obtenemos la fecha, y devolvemos la fecha en String con el formato deseado.

String getToday()
Devuelve un String con la fecha actual. El método está overide dependiendo de si le explicito el formato o no.

String getDateString (Calendar cFecha)
Devuelve un String partiendo de una fecha Calendar. Este método también está overide para explicitar el formato, o si le pasamos la fecha Date.

No hay comentarios:

Publicar un comentario