java.util.Conversión de formato de fecha aaaa-mm-dd a mm-dd-aaaa
Tengo un java.util.Date
en formato yyyy-mm-dd
. quiero que este en el formatomm-dd-yyyy
A continuación se muestra la utilidad de muestra 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í, el resultado que obtengo no está en el formatomm-dd-yyyy
.
Por favor déjeme saber cómo formatear un java.util.Date
desde yyyy-mm-dd
amm-dd-yyyy
Date
es un contenedor para el número de milisegundos desde la época 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 utilizar el Backport ThreeTen
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 Date
valor subyacente. Este es el propósito de la DateFormatter
s
Actualizado con ejemplo adicional
Por si acaso el primer ejemplo no tuviera sentido...
Este ejemplo utiliza dos formateadores para formatear la misma fecha. Luego uso estos mismos formateadores para analizar los String
valores nuevamente a Date
s. El análisis resultante no altera la forma en que Date
informa su valor.
Date#toString
es sólo un basurero de su contenido. No puedes cambiar esto, pero puedes formatear el Date
objeto como quieras.
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. Echa un vistazo más de cerca SimpleDateFormat
para asegurarte de que no estás usando 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);
'M' (Capital) representa el mes y 'm' (Simple) representa minutos
Algún ejemplo desde hace 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)
Algún ejemplo 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