Conversión de una cadena de fecha a un objeto DateTime utilizando la biblioteca Joda Time

Tengo una fecha como una cadena en el siguiente formato "04/02/2011 20:27:05" . Estoy usando la biblioteca Joda-Time y me gustaría convertirlo a un objeto DateTime . Yo si:

 DateTime dt = new DateTime("04/02/2011 20:27:05") 

Pero me aparece 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 a un objeto DateTime ?

Use DateTimeFormat :

 DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); DateTime dt = formatter.parseDateTime(string); 

Sé que esta es una vieja pregunta, pero quería agregar que, a partir de JodaTime 2.0, puedes hacer esto con un solo trazo:

 DateTime date = DateTime.parse("04/02/2011 20:27:05", DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss")); 
 DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05"); 

De los comentarios elegí una respuesta y también agregué 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); 

Su formato no es el formato ISO esperado, debe intentarlo

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

Necesita un DateTimeFormatter apropiado para el formato que está utilizando. Eche un vistazo a los documentos para obtener instrucciones sobre cómo construir uno.

Fuera del manguito, creo que necesitas format = DateTimeFormat.forPattern("M/d/y H:m:s")

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 usa las clases java.time que suplantan el venerable proyecto Joda-Time .

Parse como LocalDateTime ya que su entrada carece de cualquier indicador de zona horaria o desplazamiento desde 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: Siempre que sea posible, utilice los formatos estándar ISO 8601 al intercambiar valores de fecha y hora como texto en lugar del formato que se ve aquí. Convenientemente, las clases 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 posterior. Estas clases suplantan a las problemáticas antiguas clases heredadas 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 busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

¿Dónde obtener las clases de java.time?

  • Java SE 8 , Java SE 9 y posterior
    • Incorporado.
    • Parte de la API Java estándar con una implementación integrada.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y Java SE 7
    • Gran parte de la funcionalidad de java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
  • Androide
    • El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) específicamente para Android.
    • Consulte Cómo utilizar ThreeTenABP ….

El proyecto ThreeTen-Extra amplía 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 más .

Un método simple:

 public static DateTime transfStringToDateTime(String dateParam, Session session) throws NotesException { DateTime dateRetour; dateRetour = session.createDateTime(dateParam); return dateRetour; } 

Hay dos formas de lograr esto .

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