from - string to date java
Convertir una cadena de fecha en un objeto DateTime usando la biblioteca de Joda Time (10)
tl; dr
java.time.LocalDateTime.parse(
"04/02/2011 20:27:05" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
)
java.time
El enfoque moderno utiliza las clases java.time que suplantan al venerable proyecto Joda-Time .
LocalDateTime
como LocalDateTime
como su entrada carece de cualquier indicador de zona horaria o offset-from-UTC.
String input = "04/02/2011 20:27:05" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
ldt.toString (): 2011-02-04T20: 27: 05
Consejo: donde sea posible, use los formatos estándar ISO 8601 cuando intercambie valores de fecha y hora como texto en lugar de formato que se ve aquí. Convenientemente, las clases de java.time utilizan los formatos estándar al analizar / generar cadenas.
Acerca de java.time
El marco java.time está integrado en Java 8 y java.time posteriores. Estas clases sustituyen a las antiguas y problemáticas clases de fecha y hora como java.util.Date
, Calendar
y SimpleDateFormat
.
El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .
Para obtener más información, consulte el Tutorial de Oracle . Y busca Stack Overflow para muchos ejemplos y explicaciones. La especificación es JSR 310 .
¿Dónde obtener las clases java.time?
- Java SE 8 , Java SE 9 y posteriores
- Incorporado.
- Parte de la API de Java estándar con una implementación en paquete.
- Java 9 agrega algunas características menores y correcciones.
- Java SE 6 y Java SE 7
- Gran parte de la funcionalidad de java.time está respaldada a Java 6 y 7 en ThreeTen-Backport .
- Android
- El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) para Android específicamente.
- Vea Cómo usar ThreeTenABP… .
El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí como Interval
, YearWeek
, YearQuarter
, y more .
Tengo una fecha como una cadena en el siguiente formato "04/02/2011 20:27:05"
. Estoy utilizando la biblioteca Joda-Time y me gustaría convertirla en el objeto DateTime
. Yo si:
DateTime dt = new DateTime("04/02/2011 20:27:05")
Pero estoy recibiendo el siguiente error:
Invalid format: "04/02/2011 14:42:17" is malformed at "/02/2011 14:42:17"
¿Cómo convertir la fecha anterior en un objeto DateTime
?
De los comentarios elegí una respuesta como y también agregando TimeZone:
String dateTime = "2015-07-18T13:32:56.971-0400";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd''T''HH:mm:ss.SSSZZ")
.withLocale(Locale.ROOT)
.withChronology(ISOChronology.getInstanceUTC());
DateTime dt = formatter.parseDateTime(dateTime);
Hay dos maneras en que esto podría lograrse .
DateTimeFormat
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");
SimpleDateFormat
String dateValue = "04/02/2011 20:27:05";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); // 04/02/2011 20:27:05
Date date = sdf.parse(dateValue); // returns date object
System.out.println(date); // outputs: Fri Feb 04 20:27:05 IST 2011
Necesita un DateTimeFormatter apropiado para el formato que está usando. Echa un vistazo a los documentos para obtener instrucciones sobre cómo crear uno.
Fuera del manguito, creo que necesitas el format = DateTimeFormat.forPattern("M/d/y H:m:s")
Sé que esta es una pregunta antigua, pero quería agregar que, a partir de JodaTime 2.0, puedes hacer esto con una sola frase:
DateTime date = DateTime.parse("04/02/2011 20:27:05",
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"));
Su formato no es el formato ISO esperado, debe probar
DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime time = format.parseDateTime("04/02/2011 20:27:05");
También puede usar SimpleDateFormat , como en DateTimeFormat
Date startDate = null;
Date endDate = null;
try {
if (validDateStart!= null) startDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateStart + " " + validDateStartTime);
if (validDateEnd!= null) endDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateEnd + " " + validDateEndTime);
} catch (ParseException e) {
e.printStackTrace();
}
Un método simple:
public static DateTime transfStringToDateTime(String dateParam, Session session) throws NotesException {
DateTime dateRetour;
dateRetour = session.createDateTime(dateParam);
return dateRetour;
}
Utilice DateTimeFormat
:
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");