2011-06-22 24 views
79

Dezorientuje mnie Java API dla klasy Date. Wszystko wydaje się być przestarzałe i linki do klasy kalendarza. Zacząłem więc używać obiektów Kalendarza, aby robić to, co chciałbym zrobić z Datą, ale intuicyjnie to nurtuje mnie używanie obiektu kalendarza, kiedy wszystko, co naprawdę chcę zrobić, to tworzyć i porównywać dwie daty.Jaki jest właściwy sposób na tworzenie dat w Javie?

Czy istnieje prosty sposób na zrobienie tego? Na razie mogę

Calendar cal = Calendar.getInstance(); 
cal.setTimeInMillis(0); 
cal.set(year, month, day, hour, minute, second); 
Date date = cal.getTime(); // get back a Date object 
+13

czyli dobrze ... – Bohemian

+0

@Bohemian Kod ma problem: milisekundy utworzonego obiektu 'Date' są ustawione na dowolny zegar wewnętrzny, kiedy kod jest wykonywany (możesz obejść to, jeśli wywołasz' cal.setTimeInMillis (0) 'before' cal .set (...) '- jest jednak wynikiem pewnego rodzaju głupiego kodu). Właśnie wpadł na ten problem ... – kratenko

+0

@kratenko ok dobry punkt. A Kalendarz to bałagan i tak:/ – Bohemian

Odpowiedz

15

Możesz spróbować joda-time.

+1

+1 za to - Czas Jody jest moim zdaniem nieskończenie lepszy niż wbudowany Funkcja daty Java. – mikera

32

Doskonała biblioteka joda-time jest prawie zawsze lepszym wyborem niż klasy Data lub Kalendarz Java. Oto kilka przykładów:

DateTime aDate = new DateTime(year, month, day, hour, minute, second); 
DateTime anotherDate = new DateTime(anotherYear, anotherMonth, anotherDay, ...); 
if (aDate.isAfter(anotherDate)) {...} 
DateTime yearFromADate = aDate.plusYears(1); 
+0

Wziąłem tę sugestię i to zadziałało dla mnie świetnie. Standardowe klasy dat Java są prawdziwym trudem w użyciu. Użyłem jodobime i wykonałem swoje zadanie wykorzystując daty w mniej niż minutę! Dzięki. –

93

Można użyć SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
Date d = sdf.parse("21/12/2012"); 

Ale nie wiem, czy należy uznać bardziej prawo niż korzystać z kalendarza ...

+0

Myślę, że jest to jeszcze wolniejsze, ponieważ musi analizować ciąg znaków. – benestar

+4

Tak, prawdopodobnie masz rację, ale jest to również najbardziej "czytelny" sposób na zrobienie randki, więc jeśli nie robisz tego w pętli ... – Maxx

+2

Pamiętaj tylko, że SimpleDateFormat nie jest zsynchronizowany. Jeśli ponownie wykorzystasz instancję i dwie metody uzyskasz dostęp do tej samej metody SimpleDateFormat, spowodujesz błędy. – borjab

Powiązane problemy