yyyy util pasar obtener formato fecha convertir actual aaaa java date simpledateformat date-formatting

util - pasar de string a date java



¿Cómo convertir la fecha en formato aaaa-MM-dd? (5)

Sáb 01 de diciembre 00:00:00 GMT 2012

Tengo que convertir la fecha anterior en el formato de abajo

2012-12-01

¿Cómo puedo?

He intentado con el siguiente método pero no funciona

public Date ConvertDate(Date date){ DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String s = df.format(date); String result = s; try { date=df.parse(result); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return date; }


No puedes formatear la Date sí. Solo puedes obtener el resultado formateado en String . Use SimpleDateFormat como lo mencionaron otros.

Además, la mayoría de los getter methods in Date están en deprecated.


Respuesta moderna: use LocalDate desde java.time , la moderna API de fecha y hora de Java y su método toString :

LocalDate date = LocalDate.of(2012, Month.DECEMBER, 1); // get from somewhere String formattedDate = date.toString(); System.out.println(formattedDate);

Esto imprime

2012-12-01

Una fecha (ya sea que estemos hablando de java.util.Date o java.time.LocalDate ) no tiene un formato. Todo lo que tiene es un método toString que produce algún formato, y no puede cambiar el método toString . Afortunadamente, LocalDate.toString produce exactamente el formato que solicitó.

La clase Date está desactualizada, y la clase SimpleDateFormat que intentaste usar, es notoriamente problemática. Te recomiendo que te olvides de esas clases y uses java.time en java.time lugar. La API moderna es mucho más agradable para trabajar.

Excepto: sucede que obtiene una Date de una API heredada que no puede cambiar o que no desea cambiar ahora. Lo mejor que puedes hacer con él es convertirlo en java.time.Instant y realizar cualquier otra operación desde allí:

Date oldfashoinedDate = // get from somewhere LocalDate date = oldfashoinedDate.toInstant() .atZone(ZoneId.of("Asia/Beirut")) .toLocalDate();

Por favor, sustituya su zona horaria deseada si no es Asia / Beirut. Luego proceda como se indica arriba.

Enlace: Tutorial de Oracle: Fecha y hora , explicando cómo usar java.time .


Utilizar esta.

java.util.Date date = new Date("Sat Dec 01 00:00:00 GMT 2012"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String format = formatter.format(date); System.out.println(format);

obtendrá la salida como

2012-12-01


ACTUALIZAR Mi respuesta aquí está desactualizada. El proyecto Joda-Time ahora está en modo de mantenimiento, lo que aconseja la migración a las clases java.time . Ver la solución moderna en la Respuesta por Ole VV .

Tiempo de joda

La respuesta aceptada por NidhishKrishnan es correcta.

Para divertirse, aquí está el mismo tipo de código en Joda-Time 2.3.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. // import org.joda.time.*; // import org.joda.time.format.*; java.util.Date date = new Date(); // A Date object coming from other code. // Pass the java.util.Date object to constructor of Joda-Time DateTime object. DateTimeZone kolkataTimeZone = DateTimeZone.forID( "Asia/Kolkata" ); DateTime dateTimeInKolkata = new DateTime( date, kolkataTimeZone ); DateTimeFormatter formatter = DateTimeFormat.forPattern( "yyyy-MM-dd"); System.out.println( "dateTimeInKolkata formatted for date: " + formatter.print( dateTimeInKolkata ) ); System.out.println( "dateTimeInKolkata formatted for ISO 8601: " + dateTimeInKolkata );

Cuando se ejecuta ...

dateTimeInKolkata formatted for date: 2013-12-17 dateTimeInKolkata formatted for ISO 8601: 2013-12-17T14:56:46.658+05:30


String s; Format formatter; Date date = new Date(); // 2012-12-01 formatter = new SimpleDateFormat("yyyy-MM-dd"); s = formatter.format(date); System.out.println(s);