Konwertuj z java.util.date na JodaTime

249

Chcę przekonwertować java.util.Datena JodaTime, aby przeprowadzać odejmowanie między datami. Czy istnieje dobry zwięzły sposób przekonwertować z Datedo JodaTime?

Krt_Malta
źródło

Odpowiedzi:

478
java.util.Date date = ...
DateTime dateTime = new DateTime(date);

Upewnij datesię jednak null, że nie jest , w przeciwnym razie zachowuje się tak new DateTime()- naprawdę tego nie lubię.

skaffman
źródło
9
Więc w zasadzie:DateTime dateTime = date==null?null:new DateTime(date);
Joeri Hendrickx
121
+1 dla „w przeciwnym razie zachowuje się jak nowy DateTime () - naprawdę tego nie lubię”.
reevesy
1
@BajajidePrince No; wtedy otrzymasz tę samą wartość, co nowy DateTime (null), a dokładnie tego chcieliśmy uniknąć. Wyrażenie ma zachować wartość zerową jako zerową, co ma sens w większości sytuacji.
Joeri Hendrickx
4
Należy pamiętać, że Java Date jest niezależna od strefy czasowej, podczas gdy Joda DateTime ma chronologię.
Cristian Vrabie
1
Tak, raz lub dwa, jeśli null działa jak new DateTime (), wywołuje u mnie trochę anoyingness ...
buzzsawddog
13

http://joda-time.sourceforge.net/quickstart.html

Każda klasa datetime zapewnia różnorodność konstruktorów. Należą do nich konstruktor obiektów. Dzięki temu można na przykład skonstruować DateTime z następujących obiektów:

* Date - a JDK instant
* Calendar - a JDK calendar
* String - in ISO8601 format
* Long - in milliseconds
* any Joda-Time datetime class
Pogański
źródło
16
@skaffman, jeśli chcesz uniknąć dat zerowych, możesz zamiast tego użyć date.getTime (). Otrzymujesz wyjątek wskaźnika zerowego, który może być lepszy niż cicha awaria.
Poganie
2
Zastanawiam się, dlaczego nie przeciążili tylko swojego konstruktora dla tych obiektów.
Pieter De Bie,
1
@PieterDeBie - ponieważ system jest ogólny. Możesz zarejestrować własne typy obiektów, aby uzyskać konwersję do lub z.
Jules