yyyy simple patterns example change java date date-format

simple - conversión de formato java.util.Date aaaa-mm-dd a mm-dd-aaaa



simple date format java example (6)

Tengo un java.util.Date en el formato yyyy-mm-dd . Quiero que esté en el formato mm-dd-yyyy

A continuación se muestra el ejemplo de utilidad que probé para esta conversión:

// Setting the pattern SimpleDateFormat sm = new SimpleDateFormat("mm-dd-yyyy"); // myDate is the java.util.Date in yyyy-mm-dd format // Converting it into String using formatter String strDate = sm.format(myDate); //Converting the String back to java.util.Date Date dt = sm.parse(strDate);

Aún así, la salida que recibo no está en el formato mm-dd-yyyy .

Por favor, hágamelo saber cómo formatear un java.util.Date de yyyy-mm-dd a mm-dd-yyyy


tl; dr

LocalDate.parse( "01-23-2017" , DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) )

Detalles

Tengo un java.util.Date en el formato aaaa-mm-dd

Como otros mencionados, la clase Date no tiene formato. Tiene un recuento de milisegundos desde el comienzo de 1970 en UTC. Sin ataduras.

java.time

Las otras respuestas usan clases heredadas antiguas de fecha y hora, ahora suplantadas por las clases java.time.

Si tiene un java.util.Date , conviértalo en un objeto Instant . La clase Instant representa un momento en la línea de tiempo en UTC con una resolución de nanoseconds (hasta nueve (9) dígitos de una fracción decimal).

Instant instant = myUtilDate.toInstant();

Zona horaria

Las otras respuestas ignoran el problema crucial de la zona horaria. La determinación de una fecha requiere un huso horario. Para cualquier momento dado, la fecha varía alrededor del mundo por zona. Unos minutos después de la medianoche en París, Francia es un nuevo día, aún "ayer" en Montreal Québec.

Defina el huso horario según el contexto de su Instant .

ZoneId z = ZoneId.of( "America/Montreal" );

Aplique ZoneId para obtener un ZonedDateTime .

ZonedDateTime zdt = instant.atZone( z );

LocalDate

Si solo le importa la fecha sin una hora del día, extraiga un LocalDate .

LocalDate localDate = zdt.toLocalDate();

Para generar una cadena en formato estándar ISO 8601, AAAA-MM-DD, simplemente llame a toString . Las clases java.time utilizan los formatos estándar de forma predeterminada al generar / analizar cadenas.

String output = localDate.toString();

2017-01-23

Si desea un formato MM-DD-YYYY, defina un patrón de formateo.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM-dd-uuuu" ); String output = localDate.format( f );

Tenga en cuenta que los códigos de patrón de formato distinguen entre mayúsculas y minúsculas. El código en la Pregunta utiliza incorrectamente mm (minuto de hora) en lugar de MM (mes del año).

Use el mismo objeto DateTimeFormatter para analizar. Las clases java.time son seguras para subprocesos, por lo que puede mantener este objeto alrededor y reutilizarlo repetidamente incluso a través de subprocesos.

LocalDate localDate = LocalDate.parse( "01-23-2017" , f );

Acerca de java.time

El marco java.time está integrado en Java 8 y posterior. Estas clases suplantan a las problemáticas antiguas clases legacy fecha y hora como java.util.Date , Calendar y SimpleDateFormat .

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

Para obtener más información, consulte el Tutorial de Oracle . Y busque para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

¿Dónde obtener las clases de java.time?

  • Java SE 8 y SE 9 y posteriores
    • Incorporado.
    • Parte de la API Java estándar con una implementación integrada.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y SE 7
    • Gran parte de la funcionalidad de java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
  • Android
    • El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) específicamente para Android.
    • Consulte Cómo utilizar ThreeTenABP ....

El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval , YearWeek , YearQuarter y more .


''M'' (Capital) representa el mes y ''m'' (Simple) representa minutos

Algunos ejemplos por meses

''M'' -> 7 (without prefix 0 if it is single digit) ''M'' -> 12 ''MM'' -> 07 (with prefix 0 if it is single digit) ''MM'' -> 12 ''MMM'' -> Jul (display with 3 character) ''MMMM'' -> December (display with full name)

Algunos ejemplos por minutos

''m'' -> 3 (without prefix 0 if it is single digit) ''m'' -> 19 ''mm'' -> 03 (with prefix 0 if it is single digit) ''mm'' -> 19


Cambie el pequeño mes "mm" al "MM" mayúsculo. Funcionará. La referencia a continuación es el código de muestra.

**Date myDate = new Date(); SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy"); String strDate = sm.format(myDate); Date dt = sm.parse(strDate); System.out.println(strDate);**


Es simple uso debajo de los códigos.

final Date todayDate = new Date(); System.out.println(todayDate); System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(todayDate)); System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(todayDate)); System.out.println(todayDate);


Date es un contenedor por el número de milisegundos desde la época de Unix (00:00:00 UTC del 1 de enero de 1970).

No tiene concepto de formato.

Java 8+

LocalDateTime ldt = LocalDateTime.now(); System.out.println(DateTimeFormatter.ofPattern("MM-dd-yyyy", Locale.ENGLISH).format(ldt)); System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH).format(ldt)); System.out.println(ldt);

Salidas ...

05-11-2018 2018-05-11 2018-05-11T17:24:42.980

Java 7-

Deberías hacer uso de ThreeTen Backport

Respuesta original

Por ejemplo...

Date myDate = new Date(); System.out.println(myDate); System.out.println(new SimpleDateFormat("MM-dd-yyyy").format(myDate)); System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(myDate)); System.out.println(myDate);

Salidas ...

Wed Aug 28 16:20:39 EST 2013 08-28-2013 2013-08-28 Wed Aug 28 16:20:39 EST 2013

Ninguno de los formatos ha cambiado el valor Date subyacente. Este es el propósito de la DateFormatter s

Actualizado con un ejemplo adicional

Por si el primer ejemplo no tuviera sentido ...

Este ejemplo usa dos formateadores para formatear la misma fecha. Luego uso estos mismos formateadores para analizar los valores de String nuevo a la Date . El análisis resultante no altera la forma en que Date informa su valor.

Date#toString es solo un volcado de su contenido. No puede cambiar esto, pero puede formatear el objeto Date forma que desee

try { Date myDate = new Date(); System.out.println(myDate); SimpleDateFormat mdyFormat = new SimpleDateFormat("MM-dd-yyyy"); SimpleDateFormat dmyFormat = new SimpleDateFormat("yyyy-MM-dd"); // Format the date to Strings String mdy = mdyFormat.format(myDate); String dmy = dmyFormat.format(myDate); // Results... System.out.println(mdy); System.out.println(dmy); // Parse the Strings back to dates // Note, the formats don''t "stick" with the Date value System.out.println(mdyFormat.parse(mdy)); System.out.println(dmyFormat.parse(dmy)); } catch (ParseException exp) { exp.printStackTrace(); }

Qué salidas ...

Wed Aug 28 16:24:54 EST 2013 08-28-2013 2013-08-28 Wed Aug 28 00:00:00 EST 2013 Wed Aug 28 00:00:00 EST 2013

Además, tenga cuidado con los patrones de formato. Eche un vistazo más de cerca a SimpleDateFormat para asegurarse de que no está utilizando los patrones incorrectos;)


SimpleDateFormat("MM-dd-yyyy");

en lugar de

SimpleDateFormat("mm-dd-yyyy");

porque MM points Month , mm points minutes

SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy"); String strDate = sm.format(myDate);