jueves, 28 de mayo de 2009

Fecha Actual en Español con Java











Podemos obtener la fecha actual en java mediante tres sencillos pasos:


Paso 1. Crear un formateador que será un objeto SimpleDateFormat. Como parámetros le pasaremos el formato de la fecha y el idioma (objeto Locale):


   SimpleDateFormat formateador = new SimpleDateFormat("dd 'de' MMMM 'de' yyyy", new Locale("es_ES"));

A continuación se indica cómo formatear los días, meses y años:


Año


"yy" -> "03″

"yyyy" -> "2003″


Mes


"M" -> "7″

"M" -> "12″

"MM" -> "07″

"MMM" -> "Jul"

"MMMM" -> "Deciembre"


Día del mes


"d" -> "3″

"dd" -> "03″


Paso 2. Crear un objeto Date:


   Date fechaDate = new Date();


Paso 3. Formatear la fecha usando el formateador y pasándole como argumento el objeto Date:


   String fecha=formateador.format(fechaDate);

El ejemplo completo quedaría así:


   import java.text.SimpleDateFormat;
   import java.util.Date;
   import java.util.Locale;

   public class Principal {
   public static void main(String[] args) {
   SimpleDateFormat formateador = new SimpleDateFormat(
   "dd 'de' MMMM 'de' yyyy", new Locale("es_ES"));
   Date fechaDate = new Date();
   String fecha = formateador.format(fechaDate);
   System.out.println(fecha);
   }
   } 




Resultado


Lo que obtendremos será de este tipo:


12 de Junio de 2009

61 comentarios:

  1. OK. ESTUPENDO, PERO COMO AGREGAR ESTO EN UN ARCHIVO QUE SEA COMO UNA CLAS DE VITACORA EN DONDE TIENES QUE GUARDAR DATOS CON FECHA Y HORA DE MOVIMIENTO.

    GRACIAS MILES

    MIK

    ResponderEliminar
  2. Hola Domdoz.
    Puedes hacerlo en forma de método e incorporarlo a una clase. Al llamarlo, te devolvería un String con la fecha en español. Sería así:


    private String fecha(){
    SimpleDateFormat formateador = new SimpleDateFormat(
    "dd 'de' MMMM 'de' yyyy", new Locale("es_ES"));
    Date fechaDate = new Date();
    String fecha = formateador.format(fechaDate);
    return(fecha);
    }


    Espero haber respondido a tu pregunta.
    Gracias por comentar.

    ResponderEliminar
  3. Hola, a mi me sale en ingles el mes, 12 de March de 2012 gracias buen trabajo!

    ResponderEliminar
  4. Gracias Enrique por comentar.

    Debería salirte en español. El idioma se especifica aquí:

    new Locale("es_ES")

    Osea, le estamos indicando que la ponga en español de España.

    Asegúrate que tienes todos los "import" y que tienes la última versión del JDK (aunque no creo que sea ese el problema).

    Saludos!

    ResponderEliminar
  5. Hola Enrique esto esta interesante, necesito tu ayuda...estoy empezando con un curso de diseño web y estoy en la parte de Javascript, pero tengo problemas para realizar un ejercicio, a lo mejor para ti sea sencillo pero será posible que me puedas ayudar enviando un correo explicativo como hacerlo en js? es sobre el cálculo de la edad de una persona ingresando su fecha de nacimiento...
    Mi email es bustillos.elio@terra.com

    ResponderEliminar
  6. Hola epineda.

    Te he contestado en tu correo.

    Saludos.

    ResponderEliminar
  7. Muy buen post, sin darle rodeos al problema y explicado de manera muy sencilla.

    Saludos

    ResponderEliminar
  8. Gracias Armando. Me alegra que te haya servido.

    ResponderEliminar
  9. Si con es_ES sale el nombre del mes en inglés, puedes cambiarlo por ES. La primera línea quedaría así:

    SimpleDateFormat formateador = new SimpleDateFormat("dd 'de' MMMM 'de' yyyy", new Locale("ES"));

    Me pasaba lo mismo que a Enrique, y con este cambio ya sale el nombre del mes en español.

    ResponderEliminar
  10. Muy interesante la información me ayudo mucho.

    Muchas gracias

    ResponderEliminar
  11. como cambiar el formato de la fecha en un programa java com este por ejemplo:
    import java.util.*;
    public class HolaFecha {
    public static void main(String[] args) {
    Date fecha = new Date();
    System.out.println ("Hola, hoy es: " ) ;
    System.out.println (fecha) ;
    public Date getValue();
    }
    }

    ResponderEliminar
  12. Buenas.

    ¿Qué formato quieres darle a la fecha?

    Si quieres que sea como el del ejemplo superior, sólo tienes que hacer ésto:


    SimpleDateFormat formateador = new SimpleDateFormat(
    "dd 'de' MMMM 'de' yyyy", new Locale("es_ES"));
    Date fechaDate = new Date();
    String fecha = formateador.format(fechaDate);
    System.out.println("Hola, hoy es: " + fecha);

    Saludos.

    ResponderEliminar
  13. muy buen trabajo, me gustaria saber como mostrar la fecha con el nomre del dia, es decir, algo asi:

    lunes, 27 de septiembre de 2010

    gracias

    ResponderEliminar
  14. Buenas

    Simplemente cambia la línea:

    SimpleDateFormat formateador = new SimpleDateFormat("dd 'de' MMMM 'de' yyyy", new Locale("es_ES"));

    por esta línea:

    SimpleDateFormat formateador = new SimpleDateFormat("EEEE ',' dd 'de' MMMM 'de' yyyy", new Locale("ES"));


    Lo que he hecho es añadir el parámetro EEEE que te muestra el día de la semana.

    Espero que te sirva.

    Saludos.

    ResponderEliminar
  15. hola me podrias ayudar quiero escribir dentro de un campo de texto la fecha en letras y luego convertirla a formato dd/mm/yyyy (ejem cinco de enero de dos mil diez) o septiembre cinco de dos mil diez(09/095/2010) dependiendo como lo escriba el usuario..

    ResponderEliminar
  16. hola me podrias ayudar quiero escribir dentro de un campo de texto la fecha en letras y luego convertirla a formato dd/mm/yyyy (ejem cinco de enero de dos mil diez a 05/01/2010) o septiembre cinco de dos mil diez(09/05/2010) dependiendo como lo escriba el usuario..

    ResponderEliminar
  17. Buenas.

    Te sugiero que hagas un desplegable para los días, otro para los meses y otro para los años. De esa forma te vas a evitar que el usuario escriba cualquier cosa que no sean fechas en el campo de texto.

    A parte, para convertir los números escritos con palabras a números quizás necesites alguna librería, que yo desconozco.

    Dime si te parece bien mi solución. Si tienes alguna duda o problema, pregúntame.

    Saludos.

    ResponderEliminar
  18. gracias felipe por tu solucion, me funcionó correctamente, ya me muestra la fecha con el nombre del dia.

    ResponderEliminar
  19. Ok, me alegro de que solucionaras tu problema.

    Saludos.

    ResponderEliminar
  20. Mmm... y qué tal esta solución:

    <code>
    Date now = new Date();
    String fecha = DateFormat.getDateInstance(DateFormat.FULL).format(now);
    </code>

    De esa manera devuelve la fecha en el idioma predeterminado (si la compu está en spanish entonces así será).

    ResponderEliminar
  21. Hola Darío.

    Tu solución es correcta y muy similar a la que doy en este post.

    De todas formas, me parece interesante exponer el uso de SimpleDateFormat, como forma sencilla de formatear fechas, según nuestras necesidades.

    También hay que apuntar que si el código se ejecuta en una JSP desde un servidor, en el ordenador del cliente se verá en el idioma que tenga como predeterminado el ordenador servidor. Eso también habría que tenerlo en cuenta.

    Muchas gracias por tu apunte.

    Saludos.

    ResponderEliminar
  22. Una forma también útil para pedir datos de fechas sería usar una librería externa como SwingX, que tiene un elemento llamado JXDatePicker que simplifica mucho elegir fechas. Es una opción más usable y amigable para el usuario que múltiples comboboxes. =

    ResponderEliminar
  23. Hola Julio.

    Gracias por tu aportación. No conocía esa librería, puede facilitar mucho las cosas a la hora de hacer la interfaz gráfica y tener que trabajar con fechas. Le echaré un vistazo.

    Saludos.

    ResponderEliminar
  24. Hola Juan.

    Me alegro de que te sirviera.

    Saludos.

    ResponderEliminar
  25. Excelente ,
    ami me gustaria que el nombre del mes saliera en Mayuscula la primera

    ResponderEliminar
  26. Hola.

    Pues ahí ya tendrías que tratar el mes de forma independiente del resto de la fecha. Si tenemos el nombre del mes, tomamos un substring de éste que sería la primera letra y lo pasamos a mayúsculas:

    SimpleDateFormat formateador = new SimpleDateFormat(
    "MMMM", new Locale("es"));
    Date fechaDate = new Date();
    String fecha = formateador.format(fechaDate);

    fecha = fecha.substring(0, 1).toUpperCase() + fecha.substring(1, fecha.length());
    System.out.println(fecha);


    Saludos.

    ResponderEliminar
  27. Muchas gracias por la informacion , me fue de mucha ayuda, en mi caso era nesesario que el mes apareciera escrito en rumano indiferentemente de la configuracion regional del sistema.

    SimpleDateFormat formateador = new SimpleDateFormat("dd MMMMM yyyy", new Locale("RO"));

    ResponderEliminar
  28. Hola Esteban.

    Me alegro de que te sirviera. Efectivamente, utilizando el objeto Locale, pasar cualquier fecha a otro idioma es inmediato.

    Saludos.

    ResponderEliminar
  29. Hola gente, buen foro m gusto muxo.
    aq les dejo tra forma de ver la fecha.
    SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd 'de' MMMM 'del' yyyy", Locale.getDefault());
    Date fechaDate = new Date();
    String fecha = sdf.format(fechaDate);
    System.out.print(fecha);
    SALIDA : martes 07 de mayo del 2011

    solo seria el cambio en Locale.getDefault(), con esto sale el idioma q sta configurado tu sistema operativo

    ResponderEliminar
  30. Muchas gracias por la aportación. También hay que apuntar que mediante Locale.getDefault(), el valor de Locale será el que hay por defecto en la instancia de la Máquina Virtual de Java. Es decir, que si por ejemplo estamos en Linux, la fecha puede salirnos en inglés, cuando nosotros deseamos que aparezca en español.

    De todas formas, la variable Locale por defecto se puede cambiar fácilmente así:

    Locale.setDefault(myLocale);


    Saludos.

    ResponderEliminar
  31. Gracias
    aun funciona de maravillla !!!!!!!
    :DDDDD

    ResponderEliminar
  32. Muchas gracias con tu explicacion me adelante la clase...

    ResponderEliminar
  33. hola necesito de tu ayuda y quisiera saber como calcular la edad de una persona con la edad de nacimiento y la edad q tiene el sistema

    ResponderEliminar
  34. Hola.

    Gracias a ambos por comentar.

    Si quieres calcular la edad de una persona, puedes utilizar la librería Joda Time, que es muy útil para hacer operaciones complejas con fechas. Luego sólo tendrás que utilizar estas líneas de código:

    DateMidnight cumple = new DateMidnight(1970, 1, 20);
    DateTime ahora = new DateTime();
    Years edad = Years.yearsBetween(birthdate, now);

    Saludos.

    ResponderEliminar
  35. Para definir el Locale, hay que indicar el lenguaje y el país: new Locale(String languaje, String country);
    Para español y España sería new Locale("es", "ES"). Indicar que el lenguaje se define con 2 letras minúsculas y el país con 2 mayúsculas.

    ResponderEliminar
  36. Hola.

    Buena aclaración. Debo añadir que hay varias formas de definir el Locale (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Locale.html), en este ejemplo se ha definido especificando sólo el lenguaje:

    new Locale("es_ES") ó new Locale("es") .

    Saludos.

    ResponderEliminar
  37. hola muchas gracias.

    Para todas las versiones de android da perfecto.

    ResponderEliminar
  38. Hola... una pregunta, en ese ejemplo que tienes como se podria incrementar el mes, por decir si estamos en Agosto que me muestre Septiembre..

    Saludos y muchas gracias...

    ResponderEliminar
  39. Hola.

    @KARMA, me alegro que de funcione en Android. Gracias a tí por comentar.

    @Anónimo: Se puede hacer de forma muy sencilla, aunque utilizando métodos "deprecated", sería así:

    int mesActual = fechaDate.getMonth();
    fechaDate.setMonth(mesActual + 1);

    Sin utilizar métodos "deprecated" habría que convertir el objeto Date en Calendar y hacer la suma mediante los métodos get y set de Calendar:

    Calendar cal=Calendar.getInstance();
    cal.setTime(date);
    ...

    Saludos.

    ResponderEliminar
  40. Sssssssssssshh.... muchas gracias, funciono perfecto con el metodo que mencionas de "deprecated"..

    Saludos que estes bien...

    ResponderEliminar
  41. Me alegro!. Gracias a ti por comentar.

    Saludos.

    ResponderEliminar
  42. hola me podrían ayudar , para convertir una fecha de tipo dd-MMM-YY (02-NOV-12) a tipo YYYY-MM-dd (2012-11-04).
    el valor de la fecha (02-NOV-12) se obtiene de un archivos externo. hay alguna clase o forma de convertir el Nov en numero , bueno sin un if o switch

    ResponderEliminar
  43. si algo sirve este es la respuesta , me ayudo mucho tu ejemplo mil gracias
    Date d =new Date();
    SimpleDateFormat formateador = new SimpleDateFormat("dd-MMMM-yy", new Locale("ES"));
    try {
    d=formateador.parse("02-NOV-12");
    System.out.println(f.format(d));
    } catch (ParseException ex) {
    Logger.getLogger(testOXXO.class.getName()).log(Level.SEVERE, null, ex);
    }

    ResponderEliminar
  44. Hola Hufex.

    Gracias por exponer tu solución.

    Saludos.

    ResponderEliminar
  45. Saludos, tengo un pequeño problema, hago un sistema (mi tesis) que consta de varias partes, entre ellas, un servidor hecho en java que realiza varias tareas y funciones. Necesito que mi aplicación servidor tome solito la fecha actual del sistema, dependiendo de la fecha borrara unos registros de la base de datos. Necesito que la fecha la tome en el formato: aaaa-mm-dd, por ejemplo la de hoy: 2013-02-20 . Mi problema radica en que cada vez que compilo y ejecuto me aparece la fecha con un mes incorrecto. por ejemplo compilo una vez y me aparece: 2013-01-20 luego unos minutos despues me apareció: 2013-04-20 y la tercera vez: 2013-10-20. Por favor ayudenme.


    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd", Locale.getDefault());
    Date hoy = new Date();
    String fecha = sdf.format(hoy);
    System.out.println(fecha);

    ResponderEliminar
  46. Hola.
    Llevo varios días con un problema de formato de fechas. Necesito cambiar el formato origen: yyyy-MM-dd por formato destino: dd-MM-yyyy. La fecha de origen la recojo de un registro en sqlite de un campo DATE. Me he vuelto loco buscando en la red y algunos libros de apoyo que tengo y no doy con la solución. Decri que soy nuevo en java.
    Por favor, me puedes indicar como hacerlo.
    Muchas gracias...

    ResponderEliminar
  47. Hola.

    @German: No tengo una respuesta clara a lo que te está pasando. ¿Estás ejecutando tu proyecto en local (en tu PC) o desde un servidor?. Si tu proyecto se ejecuta desde un servidor y está balanceado en varios nodos, puede que la fecha en cada uno de ellos sea distinta, y por eso cada vez que ejecutas te muestra un mes distinto. No estoy seguro de que sea esa la causa. Comprueba la fecha del equipo donde lo ejecutas.

    @Anónimo: Debes obtener el objeto Date. Más o menos sería así:

    Connection con=DriverManager.getConnection
     ("jdbc:sqlite:misdatos.sqlite");
    Statement sent=con.createStatement();
    ResultSet rs=sent.executeQuery("SELECT * FROM mitabla");
    rs.next();
    Date mif=rs.getDate("fecha");
    System.out.println("El dia es "+mif.toString());

    Una vez que tienes el objeto Date, puedes formatear la fecha con el formato que quieras, tal y como explico en este artículo. (El ejemplo lo he sacado de aquí: http://www.eciformacion.com/noticias/blogs/programacion-en-java/java-sqlite-las-fechas/). Si tienes dudas, puedes volver a preguntarme.


    Saludos a los dos.

    ResponderEliminar
  48. hola necesito de su ayuda sobre la fecha e visto que usted tiene programas para convertir la fecha de este modo Lunes,09 de abril de 2013

    yo quiero que todo me lo pase a letra nueve de abril de dos mil trece.

    me urge.... saludos...

    ResponderEliminar
  49. Hola.

    Lo que me pides no se puede hacer directamente. Habría que convertir cada número en palabras. Para números de una o dos cifras sería sencillo, pero para números mayores, la cosa se complica. He encontrado el siguiente código que te convierte el número en palabras, pero en inglés. Habría que modificarlo al español. Es el siguiente:

    http://www.rgagnon.com/javadetails/java-0426.html



    Espero que te sirva.

    Saludos.

    ResponderEliminar
  50. Me encanto!! muchas gracias! lo mas útil y sencillo que encontré :D

    ResponderEliminar
  51. Tengo este metodo como puedo convertirlo a Date despues de realizar el metodo. Gracias
    private String getFecha() {
    java.util.Date date = new java.util.Date();
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd");
    String fecha = sdf.format(date);
    return fecha;
    }

    ResponderEliminar
  52. Hola.

    Simplemente deberías cambiar

    "private String getFecha() { "

    por

    "private Date getFecha() { "

    Para que el método te devuelva un objeto de tipo Date.

    Creo que eso es a lo que te refieres con tu pregunta. Si no es así, puedes preguntarme nuevamente.

    Saludos.

    ResponderEliminar
  53. muy buen aporte y como podria hacer para sumar una semana a la fecha actual??

    ResponderEliminar
  54. Hola.

    Te recomiendo que mires el post http://felinfo.blogspot.com.es/2015/10/calcular-la-diferencia-en-dias-entre.html . Con la librería Joda Time se puede hacer:

    DateTime now = DateTime.now();
    DateTime dateTime = now.plusDays(7);

    Saludos.

    ResponderEliminar
  55. Excelente solucion, gracias amigos

    ResponderEliminar
  56. Hola, mira que ensaye el código, efectivamente dio formato a l fecha pero me sale en ingles

    ResponderEliminar