17 mar 2010

Czas i Data w Javie

Na infoQ pojawił się wywiad dot. zapowiadanego już dawno wprowadzenia jakiejś NORMALNEJ obsługi czasu i dat w Javie. Sam wywiad może nie jest jakiś pasjonujący, ale podobał mi się jeden fragment:
InfoQ: Some of these concepts have already been explored in JodaTime. What's the relationship between that and JSR 310?
Stephen: JodaTime has been used by a lot of developers already, but it's time that the base Java case is improved for everyone. The most obvious change is the package name (from org.joda.time to javax.time), but in practice there are a few subtle differences as well.
Piękne :-) Ciekawe tylko dlaczego trzeba było czekać tak długo na tak oczywisty ruch...

9 komentarzy:

Marcin Niebudek pisze...

No ba :D Czas to delikatna materia.. ostrożnie trzeba i powolutku :-)

Łukasz Dywicki pisze...

Cóż, mi do tej pory nie doskwierały klasy "czasowe" w Javie. Do użycia Joda-Time zmusił mnie dopiero fakt, że java.util.Calendar nie da rady użyć w GWT.
A Joda jest w tym środowisku dostępna.

Tomasz Nurkiewicz pisze...

Ciekawe, czytałem niedawno o JSR 310 (Specification, 4.4) i ujrzałem: The design adopted is notably different to the Java SE Calendar API and the Joda-Time API.

Coś się plączą w zeznaniach, ale dobrze, że coś się dzieje z tym nieprzyjemnym API. Zwłaszcza brak niezmienności Date i Calendar są karygodne.

Paweł Lipiński pisze...

Ja myślę, że dla takiego tematu jak czas i data to cokolwiek co nie jest jest jakimś DSLem powinno być karane śmiercią (projektu, nie programisty...) My z Jody korzystamy od samego początku projektu - podjęliśmy decyzję o przejściu na nią po napisaniu... chyba już pierwszego testu :)

Michal Margiel pisze...

Łukasz. Jeśli Ci nie doskwierają klasy Calendar i date w Javie to może znaczyć tylko jedno: masz skłonności sado-macho.

mógłbyś mi np pokazać jak używając tych klas obliczyć ilość miesięcy między dwiema datami?

w JodaTime to wygląda tak:

Months.monthsBetween(new LocalDate(2000, 1, 1), new LocalDate(2001, 4, 1)).getMonths()

Paweł Lipiński pisze...

@Michał
Łukasz pewnie po prostu nigdy nie operował datami i tyle. Nie jest możliwe, żeby to nie doskwierało. Połowa API jest deprecated a to co nie jest, jest nieużyteczne. Blueee

A poza tym po polsku jest liczba miesięcy a nie ilość. :]

Michal Margiel pisze...

fakt, mój błąd.

Łukasz Lenart pisze...

A czemu nie używać własnych klas do reprezentacji daty, czasu, kalendarza? Wewnętrzna implementacja nie ma wtedy wpływu na naszą aplikację, a czy będzie to Joda czy Java API jest w tym momencie bez znaczenia.

Nasze klasy ograniczą użycie tylko do niezbędnych operacji i nie pozwolą na "niekontrolowany" dostęp.

Jak widać, nie długo i Joda będzie deprecated ;-)

Paweł Lipiński pisze...

No można mieć i swoje, ale przecież nie będziesz tego pisał od zera. Twoje mogą to tylko opakowywać sprawnie a'la np. commons-logging. A do faktycznej implementacji i tak wygodniej użyć Jodę niż ten standardowy shit :-)