yyyy util convertir convert java jodatime

util - string to date java dd/mm/yyyy



Tiempo de Joda: ¿Cómo convertir String a LocalDate? (6)

Cómo especificar la cadena de formato para convertir solo la fecha de la cadena. En mi caso, solo la parte de la fecha es relevante

Construyéndolo como DateTime falla:

String dateString = "2009-04-17"; DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); DateTime dateTime = formatter.parseDateTime(dateString);

con el error java.lang.IllegalArgumentException: Invalid format: "2011-04-17" is too short

Probablemente porque debería usar LocalDate en LocalDate lugar. Pero, no veo ningún formateador para LocalDate . ¿Cuál es la mejor forma de convertir String dateString = "2009-04-17"; en LocalDate (o algo más si esa no es la representación correcta)

Gracias...


En mi caso, la cadena entrante puede estar en uno de dos formatos. Así que primero intento analizar cadena con un formato más específico:

String s = "2016-02-12"; LocalDateTime ldt; try { ldt = LocalDateTime.parse(s, DateTimeFormat.forPattern("YYYY-MM-dd HH:mm")); } catch (IllegalArgumentException e) { ldt = LocalDateTime.parse(s, DateTimeFormat.forPattern("YYYY-MM-dd")); }


Esto funcionó para mí:

LocalDate d1 = LocalDate.parse("2014-07-19"); LocalDate dNow = LocalDate.now(); // Current date


Hay un problema de errores algo sutil con el uso de LocalDate.parse() o el new LocalDate() . Un fragmento de código vale más que mil palabras. En el siguiente ejemplo en Scala, repliqué que quería obtener una fecha Local en un formato de secuencia aaaaMMdd. LocalDate.parse() se complace en darme una instancia de LocalDate, pero no es la correcta (la new LocalDate() tiene el mismo comportamiento):

scala> org.joda.time.LocalDate.parse("20120202") res3: org.joda.time.LocalDate = 20120202-01-01

Lo doy el 2 de febrero de 2016 en el formato aaaaMMdd y recibo una fecha del 1 de enero de 20120202. Me voy de aquí para allá: no creo que esto sea lo que debería estar haciendo. Joda usa ''aaaa-MM-dd'' como el valor predeterminado, pero implícitamente aceptará una cadena sin caracteres ''-'', pensando que quiere el 1 de enero de ese año. Eso no parece ser un comportamiento predeterminado razonable para mí.

Dado esto, me parece que el uso de un formateador de fecha joda que no se puede engañar tan fácilmente es una mejor solución para analizar una cadena. Además, LocalDate.parse() probablemente debería lanzar una excepción si el formato de fecha no es ''aaaa-MM-dd'':

scala> val format = org.joda.time.format.DateTimeFormat.forPattern("yyyyMMdd") format: org.joda.time.format.DateTimeFormatter = org.joda.time.format.DateTimeFormatter@56826a75 scala> org.joda.time.LocalDate.parse("20120202", format) res4: org.joda.time.LocalDate = 2012-02-02

esto causará que otros formatos fallen, por lo que no obtendrá este extraño comportamiento de error:

scala> val format = org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd") format: org.joda.time.format.DateTimeFormatter = org.joda.time.format.DateTimeFormatter@781aff8b scala> org.joda.time.LocalDate.parse("20120202", format) java.lang.IllegalArgumentException: Invalid format: "20120202" is too short at org.joda.time.format.DateTimeFormatter.parseLocalDateTime(DateTimeFormatter.java:900) at org.joda.time.format.DateTimeFormatter.parseLocalDate(DateTimeFormatter.java:844) at org.joda.time.LocalDate.parse(LocalDate.java:179) ... 65 elided

que es un comportamiento mucho más sensato que devolver una fecha en el año 20120202.


Probablemente estés buscando LocalDate(Object) . Es un poco confuso ya que toma un Object genérico, pero los documentos indican que usará un ConverterManager que sepa cómo manejar una String si pasa una String al constructor, por ej.

LocalDate myDate = new LocalDate("2010-04-28");


Puede usar LocalDate.of con el año, mes y día pasados ​​como argumentos separados:

LocalDate date1 = LocalDate.of(2009, 4, 17); LocalDate date2 = LocalDate.of(2009, Month.APRIL, 17);


Use el método de parse(String) .

LocalDate date = LocalDate.parse("2009-04-17");