Fecha del calendario al formato aaaa-MM-dd en java

Resuelto nr.iras.sk asked hace 11 años • 11 respuestas

Cómo convertir la fecha del calendario al yyyy-MM-ddformato.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);            
Date inActiveDate = null;
try {
    inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

Esto producirá inActiveDate = Wed Sep 26 00:00:00 IST 2012. Pero lo que necesito es 2012-09-26. Mi propósito es comparar esta fecha con otra fecha en mi base de datos usando criterios de Hibernación. Entonces necesito el objeto de fecha en yyyy-MM-ddformato.

nr.iras.sk avatar Sep 25 '12 10:09 nr.iras.sk
Aceptado

Un Java Datees un contenedor para el número de milisegundos desde el 1 de enero de 1970 a las 00:00:00 GMT.

Cuando usas algo como System.out.println(date), Java usa Date.toString()para imprimir el contenido.

La única forma de cambiarlo es anular Datey proporcionar su propia implementación de Date.toString(). Ahora, antes de que enciendas tu IDE y pruebes esto, yo no lo haría; sólo complicará las cosas. Es mejor que formatee la fecha según el formato que desea usar (o mostrar).

Java 8+

LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"

String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12

Antes de Java 8

Deberías utilizar el Backport ThreeTen

Lo siguiente se mantiene con fines históricos (como la respuesta original)

Lo que puedes hacer es formatear la fecha.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Output "Wed Sep 26 14:23:28 EST 2012"

String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"

System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"

En realidad son la misma fecha, representada de manera diferente.

MadProgrammer avatar Sep 25 '2012 04:09 MadProgrammer

Tu código es incorrecto. No tiene sentido analizar la fecha y mantenerla como objeto Fecha.

Puede formatear el objeto de fecha del calendario cuando desee mostrarlo y mantenerlo como una cadena.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
String inActiveDate = null;
try {
    inActiveDate = format1.format(date);
    System.out.println(inActiveDate );
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
Niroshan Abayakoon avatar Sep 25 '2012 04:09 Niroshan Abayakoon

java.tiempo

La respuesta de MadProgrammer es correcta, especialmente el consejo sobre Joda-Time . El sucesor de Joda-Time ahora está integrado en Java 8 como el nuevo paquete java.time . Aquí hay un código de ejemplo en Java 8.

Cuando se trabaja con fecha y hora (a diferencia de la fecha local), la zona horaria es crítica. El día del mes depende de la zona horaria. Por ejemplo, la zona horaria de la India está +05:30(cinco horas y media por delante de UTC), mientras que Francia está sólo una hora por delante. Así, un momento de un nuevo día en la India tiene una fecha, mientras que el mismo momento en Francia tiene la fecha de “ayer”. Crear una salida de cadena que carezca de zona horaria o información de compensación está creando ambigüedad. Usted solicitó una salida AAAA-MM-DD, así que se la proporcioné, pero no la recomiendo. En lugar de, ISO_LOCAL_DATEhabría usado ISO_DATEpara obtener este resultado:2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

Volcar a la consola…

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

Cuando se ejecuta...

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

Tiempo Joda

Código similar que utiliza la biblioteca Joda-Time , la precursora de java.time.

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

ISO 8601

Por cierto, ese formato de su cadena de entrada es un formato estándar, uno de varios formatos útiles de cadenas de fecha y hora definidos por ISO 8601 .

Tanto Joda-Time como java.time utilizan formatos ISO 8601 de forma predeterminada al analizar y generar representaciones de cadenas de varios valores de fecha y hora.

Basil Bourque avatar Feb 25 '2014 08:02 Basil Bourque

java.util.DateEl objeto no puede representar la fecha en un formato personalizado , sino que debe usar SimpleDateFormat.formatun método que devuelva string.

String myString=format1.format(date);
KV Prajapati avatar Sep 25 '2012 04:09 KV Prajapati