Fecha del calendario al formato aaaa-MM-dd en java
Cómo convertir la fecha del calendario al yyyy-MM-dd
formato.
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-dd
formato.
Un Java Date
es 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 Date
y 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.
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();
}
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_DATE
habría usado ISO_DATE
para 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.
java.util.Date
El objeto no puede representar la fecha en un formato personalizado , sino que debe usar SimpleDateFormat.format
un método que devuelva string
.
String myString=format1.format(date);