Conversione di una stringa di data in un object DateTime usando la libreria Time di Joda

Ho una data come stringa nel seguente formato "04/02/2011 20:27:05" . Sto usando la libreria Joda-Time e vorrei convertirlo in object DateTime . L’ho fatto:

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

Ma sto ricevendo il seguente errore:

 Invalid format: "04/02/2011 14:42:17" is malformsd at "/02/2011 14:42:17" 

Come convertire la data di cui sopra in un object DateTime ?

Usa DateTimeFormat :

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

So che questa è una vecchia domanda, ma volevo aggiungere che, a partire da JodaTime 2.0, puoi farlo con una sola riga:

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

Dai commenti ho scelto una risposta come e aggiungendo anche 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); 

Il tuo formato non è il formato ISO previsto, dovresti provare

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

Puoi anche utilizzare SimpleDateFormat , come in 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(); } 

È necessario un DateTimeFormatter appropriato al formato che stai utilizzando. Dai un’occhiata ai documenti per le istruzioni su come costruirne uno.

A prima vista, penso che sia necessario 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

L’approccio moderno utilizza le classi java.time che soppiantano il venerabile progetto Joda-Time .

Analizza come LocalDateTime come input manca qualsiasi indicatore di fuso orario o offset-da-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

Suggerimento: se ansible, utilizza i formati ISO 8601 standard quando si scambiano i valori di data e ora come testo anziché il formato visto qui. Convenientemente, le classi java.time utilizzano i formati standard durante l’analisi / generazione di stringhe.


A proposito di java.time

Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantano le fastidiose vecchie lezioni di data e ora come java.util.Date , Calendar e SimpleDateFormat .

Il progetto Joda-Time , ora in modalità di manutenzione , consiglia la migrazione alle classi java.time .

Per saperne di più, consultare l’ esercitazione Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .

Dove ottenere le classi java.time?

  • Java SE 8 , Java SE 9 e versioni successive
    • Built-in.
    • Parte dell’API Java standard con un’implementazione in bundle.
    • Java 9 aggiunge alcune funzionalità e correzioni minori.
  • Java SE 6 e Java SE 7
    • Gran parte della funzionalità java.time è back-porting su Java 6 e 7 in ThreeTen-Backport .
  • android
    • Il progetto ThreeTenABP adatta ThreeTen-Backport (menzionato sopra) per Android in particolare.
    • Vedi Come usare ThreeTenABP ….

Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un terreno di prova per possibili aggiunte future a java.time. Puoi trovare alcune classi utili come Interval , YearWeek , YearQuarter e altro .

Un metodo semplice:

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

Ci sono due modi in cui questo potrebbe essere raggiunto .

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