Chociaż Joda jest bogata w funkcje i bardziej wyrafinowana niż standardowy czas Java, nie zawsze może być najlepszym rozwiązaniem. Jak zdecydować, czy powinienem używać Joda Time lub Java Time w dowolnym kodzie Java?
Czy istnieje jakaś wskazówka, która mówi nam, jak wybrać właściwą w zależności od naszych wymagań?
Odpowiedzi:
Joda Time to takie ulepszenie w stosunku do biblioteki czasu Java, że prawie zawsze jest właściwym wyborem, z wyjątkiem następujących wyjątków:
Gdy dodanie do projektu zależności osób trzecich jest trudne lub niepożądane
Gdy jego użycie w interfejsie publicznym spowodowałoby problemy, np. Uzyskanie ORM do obsługi pól czasu java i Joda
Jednak w przypadku 2) lepiej byłoby, jeśli to możliwe, używać Jody wewnętrznie.
Powyższe rzeczy warto pamiętać, ale powinny być rzadkie. W razie wątpliwości idź z Jodą.
źródło
Zauważ, że na stronie Joda-Time napisano:
Główny współautor Joda-Time , jodastephen , jest także głównym współtwórcą JSR-310, co można zobaczyć w repozytorium GitHub powiązanym z http://www.threeten.org/ . Nawiasem mówiąc, jodastephen ma również uchwyt SO ...
Myślę, że można bezpiecznie stwierdzić, że możemy czuć się komfortowo dzięki nowemu interfejsowi API Data i godzina, jak przewidziano w Javie 8 i nowszych.
Niektóre dodatkowe odniesienia:
java.time.*
JavadocDate
Javadocźródło
Interfejs API standardowej daty Java jest tak fundamentalnie zepsuty, że często zastanawiałem się nad dodaniem Joda Time do rozszerzeń biblioteki JVM, aby domyślnie ładował się ścieżkę klas z resztą interfejsu API Java.
Jeśli kiedykolwiek miałeś za zadanie modernizację internacjonalizacji i stref czasowych w starszej aplikacji Java i próbowałeś użyć samego standardowego interfejsu API Java, zrozumiesz, co mam na myśli. Byłem w stanie zamienić tysiące asinine linii kodu w mniej niż sto. Wzrost wydajności jest nie do pomyślenia.
Ponadto standardowy interfejs API Data nie jest intuicyjny, ponieważ płynny interfejs Joda API można pobrać w ciągu kilku godzin, a nie tygodni. Twoja analogia do próby przedostania się na oddaloną o dwie mile wyspę jest bardziej podobna do następującej.
Lub...
Jak stwierdzono w innych odpowiedziach, kilka wad, takich jak ORM, przestaje istnieć, ponieważ Hibernacja ma teraz wtyczki, które umożliwiają mapowanie właściwości komponentu bean typu Joda na pola daty / godziny bazy danych. JPA również może mieć na to odpowiedź.
Jeśli chcesz, aby Twoja aplikacja miała minimalną powierzchnię jako aplikacja komputerowa, ponieważ dotyczy miejsca na dysku, być może Java nie jest nawet właściwym wyborem języka.
źródło
Jeszcze jeden punkt: Czas Java (tj.
Date
) Nie jest ThreadSafe, ale JodaTime jest. Dlatego JodaTime jest preferowane, gdy wymagają tego wymaganiaAlbo w przypadku prostych aplikacji czas Java jest w porządku.
źródło
java.time
jest realizowane poprzez niezmienność. Zobacz stackoverflow.com/questions/9303532/… . Działa to dobrze zarówno w przypadku prostych, jak i złożonych aplikacji. Nawet dokument api stwierdza, że „Wszystkie klasy są niezmienne i bezpieczne dla wątków” (dosłownie zacytowane w drugim akapicie). Zjava.util
drugiej strony stare klasy mają kilka problemów. Zdaję sobie sprawę, że ta odpowiedź odnosi się do tego drugiego, ale ważne jest, aby wprowadzić to rozróżnienie teraz.Java.time ramowa zastępuje obie klasy Date-Time starszych i Joda-Time
Aktualizacja: Stare klasy daty i czasu dostarczane z najwcześniejszymi wersjami Javy są teraz starsze, oficjalnie wyparte przez klasy java.time wbudowane w Javę 8, Java 9 i nowsze wersje .
Date
,Calendar
,SimpleDateFormat
, Ajava.sql.*
zajęcia date-time powinny być unikane. Nigdy nie ma potrzeby korzystania z tych mylących, kłopotliwych, źle zaprojektowanych klas. Są całkowicie zastąpione przez klasy java.time. Ich jedynym celem jest teraz utrzymanie istniejącego starego kodu. Podczas łączenia ze starym kodem można konwertować do / z java.time, wywołując nowe metody dodane do starych klas. Aby uzyskać więcej informacji na temat konwersji, zobacz: Konwertuj plik java.util.Date na jaki typ „java.time”? .Projekt Joda-Time , teraz w trybie konserwacji , zaleca migrację do klas java.time . Projekt Joda-Time zainspirował środowisko java.time. Obaj są prowadzeni przez tego samego mężczyznę, Stephena Colebourne . Możesz myśleć o java.time jako o przepisaniu / przeprojektowaniu Joda-Time, całkowicie nowym kodzie, ale wykorzystującym to, czego nauczyłem się przez lata od budowy pierwszej w branży kompleksowej i wyrafinowanej biblioteki dat i czasu.
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj stos przepełnienia dla wielu przykładów i wyjaśnień.
Duża część funkcji java.time została przeniesiona z powrotem do Java 6 i 7 w ThreeTen-Backport, a następnie dostosowana do Androida w ThreeTenABP (zobacz Jak korzystać… ).
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time. Można znaleźć kilka przydatnych klas tutaj takie jak
Interval
,YearWeek
,YearQuarter
, i więcej .źródło