2011-01-11 13 views
44

Sto cercando di aggiungere semplicemente le informazioni di TimeZone in un LocalDate prima di eseguire altri calcoli. Il LocalDate proviene dall'utilizzo di ObjectLab LocalDateCalculator per aggiungere giorni a un DateTime esistente, ma il metodo deve restituire una ReadableInstant modificata per formare un intervallo che posso quindi controllare.Come convertire Joda Localdate in Joda DateTime?

Il codice che sto cercando è pari a una conversione di Joda LocalDate a Joda DateTime:

LocalDate contextLocalBusinessDate = calculator.getCurrentBusinessDate(); 
DateTime businessDateAsInContextLocation = new DateTime(contextLocalBusinessDate, contextTimeZone); 

L'errore che ottengo è dal sistema di conversione di Joda:

java.lang.IllegalArgumentException: No instant converter found for type: org.joda.time.LocalDate 
     at org.joda.time.convert.ConverterManager.getInstantConverter(ConverterManager.java:165) 
     at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:147) 
     at org.joda.time.DateTime.<init>(DateTime.java:192) 

sto cercando una soluzione a questo problema o una soluzione che si traduce in un intervallo accurato con informazioni complete sul fuso orario.

risposta

66

Ci sono vari metodi su LocalDate per questo, tra cui:

Devi essere esplicito su ciò che si desidera che il componente temporale per essere nel re Sulting DateTime oggetto, motivo per cui il costruttore di conversioni generiche di DateTime non può farlo.

+11

Spot on. Una cosa di cui essere a conoscenza: toDateTimeAtStartOfDay non significa "mezzanotte" ... alcuni fusi orari implementano le modifiche all'ora legale per saltare da mezzanotte all'1: 00. –

+0

Si potrebbe concludere come ho fatto, che quale dei metodi (che tutti restituiscono DateTime, come quelli qui) che si sceglie non contano davvero: il fatto che sia stato utilizzato un LocalDate dovrebbe implicare che è stato codificato senza alcun intento per un particolare orario in quella data, quindi qualunque sia la volta che lo date nella conversione in quella data è altrettanto buono come qualsiasi altra volta in quella data. La chiave è che dargli un po 'di tempo è ciò che permette la conversione in LocalDate, e non importa quale sia il tempo (dal momento che hai iniziato con un LocalDate a cui non importava del tempo) se tutto ciò che ti serve è una sorta di DateTime . – cellepo

+0

Please help - Non riesco a vedere nessuno di questi metodi sul mio oggetto LocalDate. Cosa significa la notazione '::' nella tua risposta? –

Problemi correlati