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

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

 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 utilizando los criterios de Hibernate. Entonces necesito el objeto de fecha en formato yyyy-MM-dd .

Una Date Java es un contenedor por el número de milisegundos desde el 1 de enero de 1970, 00:00:00 GMT.

Cuando utiliza algo como System.out.println(date) , Java usa Date.toString() para imprimir los contenidos.

La única forma de cambiarlo es anular la Date y proporcionar su propia implementación de Date.toString() . Ahora, antes de activar tu IDE y probar esto, no lo haría; solo complicará las cosas. Le conviene formatear la fecha al 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 hacer uso de ThreeTen Backport

Lo siguiente se mantiene con propósitos 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" 

Estas son en realidad la misma fecha, representadas de manera diferente.

Tu código es incorrecto No tiene sentido analizar la fecha y mantenerlo como un objeto Date.

Puede formatear el objeto de fecha de 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.time

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 India es +05:30 (cinco horas y media por delante de UTC), mientras que Francia está solo una hora por delante. Entonces, un momento en un nuevo día en India tiene una fecha, mientras que el mismo momento en Francia tiene la fecha “de ayer”. Crear una cadena de salida que carece de cualquier zona horaria o información de compensación crea ambigüedad. Usted solicitó la salida YYYY-MM-DD, así que proporcioné, pero no lo recomiendo. En lugar de ISO_LOCAL_DATE , habría utilizado ISO_DATE para obtener esta salida: 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 ); 

Volcado 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 

Joda-Time

Código similar usando la biblioteca Joda-Time , el precursor 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 de cadena de fecha y hora útiles definidos por ISO 8601 .

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

java.util.Date objeto java.util.Date no puede representar la fecha en formato personalizado; en su lugar, debe usar el método SimpleDateFormat.format que devuelve una string .

 String myString=format1.format(date); 

Para analizar un objeto java.util.Date primero debe convertirlo a String usando su propio formato.

 inActiveDate = format1.parse( format1.format(date) ); 

Pero creo que estás siendo redundante aquí.

 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, 7); Date date = c.getTime(); SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY"); JOptionPane.showMessageDialog(null, ft.format(date)); 

Esto mostrará su fecha + 7 días en formato de mes, día y año en un panel de ventana de JOption.

 public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(year, month, date); SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd"); String formatted = format1.format(cal.getTime()); System.out.println(formatted); } 

Encontré este código donde la fecha se compara en un formato para comparar con el campo de fecha en la base de datos … puede ser que esto pueda serle útil …

Cuando convierte la cadena a la fecha utilizando simpledateformat, es difícil compararla con el campo Fecha en las bases de datos de MySQL.

Así que convierta la fecha de la cadena java en el formato usando seleccionar STR_to_DATE (‘yourdate’, ‘% m /% d /% Y’) -> en este formato, luego obtendrá el formato de fecha exacta del campo de fecha de mysql.

http://javainfinite.com/java/java-convert-string-to-date-and-compare/

 public static String ThisWeekStartDate(WebDriver driver) { Calendar c = Calendar.getInstance(); //ensure the method works within current month c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); System.out.println("Before Start Date " + c.getTime()); Date date = c.getTime(); SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a"); String CurrentDate = dfDate.format(date); System.out.println("Start Date " + CurrentDate); return CurrentDate; } public static String ThisWeekEndDate(WebDriver driver) { Calendar c = Calendar.getInstance(); //ensure the method works within current month c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); System.out.println("Before End Date " + c.getTime()); Date date = c.getTime(); SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a"); String CurrentDate = dfDate.format(date); System.out.println("End Date " + CurrentDate); return CurrentDate; }