Tengo un java.util.Date
formato yyyy-mm-dd
. Quiero que esté 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í, la salida que obtengo no está en el formato mm-dd-yyyy
.
Por favor, avíseme cómo formatear un java.util.Date
de yyyy-mm-dd
amm-dd-yyyy
java
date
date-format
user182944
fuente
fuente
yyyy-mm-dd
.Respuestas:
Date
es un contenedor para 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ía utilizar 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
Date
valor subyacente . Este es el propósito de laDateFormatter
sActualizado con un ejemplo adicional
Por si acaso el primer ejemplo no tuviera sentido ...
Este ejemplo utiliza dos formateadores para formatear la misma fecha. Luego utilizo estos mismos formateadores para analizar los
String
valores de nuevo aDate
s. El análisis resultante no altera la forma en queDate
informa su valor.Date#toString
es solo un volcado de su contenido. No puede cambiar esto, pero puede formatear elDate
objeto de la forma que deseetry { 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
SimpleDateFormat
para asegurarse de que no está utilizando los patrones incorrectos;)fuente
SimpleDateFormat("MM-dd-yyyy");
en vez de
SimpleDateFormat("mm-dd-yyyy");
porque
MM points Month
,mm points minutes
SimpleDateFormat sm = new SimpleDateFormat("MM-dd-yyyy"); String strDate = sm.format(myDate);
fuente
java.util.Date
?'M' (Capital) representa el mes y 'm' (Simple) representa los minutos
Algún ejemplo 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)
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
fuente
tl; dr
LocalDate.parse( "01-23-2017" , DateTimeFormatter.ofPattern( "MM-dd-uuuu" ) )
Detalles
Como se mencionó en otros, la
Date
clase no tiene formato. Tiene una cuenta de milisegundos desde principios de 1970 en UTC. Sin ataduras.java.time
Las otras Respuestas usan antiguas clases de fecha y hora antiguas problemáticas, ahora suplantadas por las clases java.time.
Si tiene un
java.util.Date
, conviértalo en unInstant
objeto. LaInstant
clase representa un momento en la línea de tiempo en UTC con una resolución de nanosegundos (hasta nueve (9) dígitos de una fracción decimal).Zona horaria
Las otras respuestas ignoran la cuestión crucial de la zona horaria. Determinar una fecha requiere una zona horaria. En un momento dado, la fecha varía en todo el mundo según la zona. Pocos minutos después de la medianoche en París, Francia es un nuevo día, mientras que todavía es “ayer” en Montreal Québec.
Defina la zona horaria por la que desea contexto para su
Instant
.ZoneId z = ZoneId.of( "America/Montreal" );
Aplicar
ZoneId
para obtener unZonedDateTime
.LocalDate
Si solo le importa la fecha sin una hora del día, extraiga un
LocalDate
.Para generar una cadena en formato estándar ISO 8601, AAAA-MM-DD, simplemente llame
toString
. Las clases java.time utilizan los formatos estándar de forma predeterminada al generar / analizar cadenas.Si desea un formato MM-DD-AAAA, defina un patrón de formato.
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 de la Pregunta se usó incorrectamente
mm
(minuto de la hora) en lugar deMM
(mes del año).Utilice el mismo
DateTimeFormatter
objeto para analizar. Las clases java.time son seguras para subprocesos, por lo que puede mantener este objeto y reutilizarlo repetidamente incluso entre subprocesos.LocalDate localDate = LocalDate.parse( "01-23-2017" , f );
Acerca de java.time
El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como
java.util.Date
,Calendar
, ySimpleDateFormat
.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 Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
¿Dónde obtener las clases java.time?
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como
Interval
,YearWeek
,YearQuarter
, y más .fuente
Es un uso sencillo 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);
fuente
Puede obtener día, mes y año y puede concatenarlos o puede usar el formato MM-dd-aaaa como se indica a continuación.
Date date1 = new Date(); String mmddyyyy1 = new SimpleDateFormat("MM-dd-yyyy").format(date1); System.out.println("Formatted Date 1: " + mmddyyyy1); Date date2 = new Date(); Calendar calendar1 = new GregorianCalendar(); calendar1.setTime(date2); int day1 = calendar1.get(Calendar.DAY_OF_MONTH); int month1 = calendar1.get(Calendar.MONTH) + 1; // {0 - 11} int year1 = calendar1.get(Calendar.YEAR); String mmddyyyy2 = ((month1<10)?"0"+month1:month1) + "-" + ((day1<10)?"0"+day1:day1) + "-" + (year1); System.out.println("Formatted Date 2: " + mmddyyyy2); LocalDateTime ldt1 = LocalDateTime.now(); DateTimeFormatter format1 = DateTimeFormatter.ofPattern("MM-dd-yyyy"); String mmddyyyy3 = ldt1.format(format1); System.out.println("Formatted Date 3: " + mmddyyyy3); LocalDateTime ldt2 = LocalDateTime.now(); int day2 = ldt2.getDayOfMonth(); int mont2= ldt2.getMonthValue(); int year2= ldt2.getYear(); String mmddyyyy4 = ((mont2<10)?"0"+mont2:mont2) + "-" + ((day2<10)?"0"+day2:day2) + "-" + (year2); System.out.println("Formatted Date 4: " + mmddyyyy4); LocalDateTime ldt3 = LocalDateTime.of(2020, 6, 11, 14, 30); // int year, int month, int dayOfMonth, int hour, int minute DateTimeFormatter format2 = DateTimeFormatter.ofPattern("MM-dd-yyyy"); String mmddyyyy5 = ldt3.format(format2); System.out.println("Formatted Date 5: " + mmddyyyy5); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(new Date()); int day3 = calendar2.get(Calendar.DAY_OF_MONTH); // OR Calendar.DATE int month3= calendar2.get(Calendar.MONTH) + 1; int year3 = calendar2.get(Calendar.YEAR); String mmddyyyy6 = ((month3<10)?"0"+month3:month3) + "-" + ((day3<10)?"0"+day3:day3) + "-" + (year3); System.out.println("Formatted Date 6: " + mmddyyyy6); Date date3 = new Date(); LocalDate ld1 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date3)); // Accepts only yyyy-MM-dd int day4 = ld1.getDayOfMonth(); int month4= ld1.getMonthValue(); int year4 = ld1.getYear(); String mmddyyyy7 = ((month4<10)?"0"+month4:month4) + "-" + ((day4<10)?"0"+day4:day4) + "-" + (year4); System.out.println("Formatted Date 7: " + mmddyyyy7); Date date4 = new Date(); int day5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getDayOfMonth(); int month5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getMonthValue(); int year5 = LocalDate.parse(new SimpleDateFormat("yyyy-MM-dd").format(date4)).getYear(); String mmddyyyy8 = ((month5<10)?"0"+month5:month5) + "-" + ((day5<10)?"0"+day5:day5) + "-" + (year5); System.out.println("Formatted Date 8: " + mmddyyyy8); Date date5 = new Date(); int day6 = Integer.parseInt(new SimpleDateFormat("dd").format(date5)); int month6 = Integer.parseInt(new SimpleDateFormat("MM").format(date5)); int year6 = Integer.parseInt(new SimpleDateFormat("yyyy").format(date5)); String mmddyyyy9 = ((month6<10)?"0"+month6:month6) + "-" + ((day6<10)?"0"+day6:day6) + "-" + (year6);`enter code here` System.out.println("Formatted Date 9: " + mmddyyyy9);
fuente
Cambie el mes pequeño en "mm" por "MM" en mayúscula y funcionará. Para referencia, a continuación se muestra 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);
fuente
mira estos ..
fecha de formato
DateTimeFormatter
fecha de análisis
Instantáneo con zona
fuente