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);