2011-01-11 16 views
44

Ich versuche, TimeZone-Informationen einfach wieder in ein LocalDate einzufügen, bevor ich weitere Berechnungen durchführe. Das LocalDate kam von der Verwendung des ObjectLab LocalDateCalculator, um Tage zu einer vorhandenen DateTime hinzuzufügen, aber die Methode muss eine modifizierte ReadableInstant zurückgeben, um ein Intervall zu bilden, das ich dann untersuchen kann.Wie konvertiert man Joda Localdate zu Joda DateTime?

Der Code, den ich Beträge zu einem Umsatz von Joda LOCALDATE zu Joda Datetime versucht:

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

Der Fehler ich Joda die Umwandlung von System zu erhalten:

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) 

Ich suche eine Fehlerbehebung für dieses Problem oder eine Problemumgehung, die zu einem genauen Intervall mit vollständigen Zeitzoneninformationen führt.

Antwort

66

Es gibt verschiedene Methoden, die auf LocalDate hierfür, einschließlich:

Man muss explizit über das, was Sie das wollen Zeitkomponente in der Re sein sulting DateTime Objekt, weshalb DateTime 's allgemeine Conversion-Konstruktor kann es nicht tun.

+11

Spot auf. Eine Sache zu beachten: toDateTimeAtStartOfDay bedeutet nicht "Mitternacht" ... einige Zeitzonen implementieren Sommerzeit Änderungen von Mitternacht bis 1 Uhr morgens zu überspringen. –

+0

Sie könnten daraus schließen, dass die Methode (die alle DateTime wie die hier zurückgibt), die Sie wählen, nicht wirklich wichtig ist: Die Tatsache, dass ein LocalDate verwendet wurde, sollte bedeuten, dass es ohne Absicht für einen bestimmten Code codiert wurde Zeit an diesem Datum, also wann immer Sie es in der Konvertierung an diesem Datum geben, ist genauso gut wie jedes andere Mal an diesem Datum. Der Schlüssel ist, dass es eine Zeit gibt, die die Konvertierung in LocalDate ermöglicht, und es spielt keine Rolle, wie spät es ist (seit Sie mit einem LocalDate begonnen haben, das die Zeit nicht interessiert), wenn Sie nur eine Art DateTime benötigen . – cellepo

+0

Bitte helfen - ich kann keine dieser Methoden auf meinem LocalDate-Objekt sehen. Was bedeutet die '::' -Notation in Ihrer Antwort? –

Verwandte Themen