Tomasz Faszyński

Tomasz Faszyński Specjalista ds.
programowania

Temat: SimpleDateFormat parse to Date

Mam taki kod w klasie Test:

private Date date;


Zaś w main mam:

SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
String dateAsString = sdf.format(new Date()); // 09.01.2013

try {
date.setDate(sdf.parse(dateAsString)); // tutaj jednak otrzymuję datę + godzinę
} catch (ParseException e1) {
e1.printStackTrace();
}


Jak zapisać do pola date wartość w postaci dd.mm.yyyy?
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: SimpleDateFormat parse to Date

Przecież to Ci się nie skompiluje - http://docs.oracle.com/javase/6/docs/api/java/util/Dat...

zamiast

date.setDate(sdf.parse(dateAsString));


daj po prostu


date = sdf.parse(dateAsString);


Dostaniesz 9 stycznia, godzina 00:00:00 CET, chyba o to Ci chodziło?Maciej Nowicki edytował(a) ten post dnia 09.01.13 o godzinie 10:57
Tomasz Faszyński

Tomasz Faszyński Specjalista ds.
programowania

Temat: SimpleDateFormat parse to Date

Maciej Nowicki:
Przecież to Ci się nie skompiluje - http://docs.oracle.com/javase/6/docs/api/java/util/Dat...

zamiast

date.setDate(sdf.parse(dateAsString));


daj po prostu


date = sdf.parse(dateAsString);


Dostaniesz 9 stycznia, godzina 00:00:00 CET, chyba o to Ci chodziło?

Kompiluje się.

Właśnie ja chcę zapisać do pola tylko taki format: 09.01.2013 czy jest w ogóle taka możliwość?
Jarosław Szczepankiewicz

Jarosław Szczepankiewicz Lead Technical
Consultant

Temat: SimpleDateFormat parse to Date

http://docs.oracle.com/javase/6/docs/api/java/text/Dat...

nie zebym marudził ale znalezienie tej odpowiedzi to mniej niż minuta na analizę konstruktora Date() w javadocach
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: SimpleDateFormat parse to Date

Tomasz Faszyński:
Kompiluje się.

Screenshot or it didn't happen:


Obrazek

Właśnie ja chcę zapisać do pola tylko taki format: 09.01.2013 czy jest w ogóle taka możliwość?

A jak chcesz zapisać wartość "09.01.2013" to zapisz po prostu String, bo obiekt Date zawsze reprezentuje dokładny czas co do milisekundy.
Tomasz Faszyński

Tomasz Faszyński Specjalista ds.
programowania

Temat: SimpleDateFormat parse to Date

Maciej Nowicki:
Tomasz Faszyński:
Kompiluje się.

Screenshot or it didn't happen:


Obrazek

Właśnie ja chcę zapisać do pola tylko taki format: 09.01.2013 czy jest w ogóle taka możliwość?

A jak chcesz zapisać wartość "09.01.2013" to zapisz po prostu String, bo obiekt Date zawsze reprezentuje dokładny czas co do milisekundy.

A czy jeżeli będę miał jako Stringi to sortowanie po dacie będzie działać poprawnie?
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: SimpleDateFormat parse to Date

Tomasz Faszyński:
A czy jeżeli będę miał jako Stringi to sortowanie po dacie będzie działać poprawnie?

Gdzie? W bazie danych, w Javie?

Sortowanie po Stringach w Javie zawsze będzie działało poprawnie - po prostu domyślnie posortuje Ci te daty w porządku leksykograficznym (co byłoby w sumie ok w przypadku formatu yyyy.MM.dd). W Twoim wypadku musisz napisać własny Comparator.

Najlepiej to nie kombinuj jak koń pod górkę, tylko daty trzymaj w obiektach Date a do wyświetlenia na ekranie formatuj je za pomocą SimpleDateFormatMaciej Nowicki edytował(a) ten post dnia 09.01.13 o godzinie 11:42
Tomasz Faszyński

Tomasz Faszyński Specjalista ds.
programowania

Temat: SimpleDateFormat parse to Date

Maciej Nowicki:
Tomasz Faszyński:
A czy jeżeli będę miał jako Stringi to sortowanie po dacie będzie działać poprawnie?

Gdzie? W bazie danych, w Javie?

Sortowanie po Stringach w Javie zawsze będzie działało poprawnie - po prostu domyślnie posortuje Ci te daty w porządku leksykograficznym (co byłoby w sumie ok w przypadku formatu yyyy.MM.dd). W Twoim wypadku musisz napisać własny Comparator.

Najlepiej to nie kombinuj jak koń pod górkę, tylko daty trzymaj w obiektach Date a do wyświetlenia na ekranie formatuj je za pomocą SimpleDateFormat

Ok z tym sobie już poradziłem. Teraz chcę wysłać obiekt Date za pomocą JSON używając Jacksona.
Znalazłem tutorial http://loianegroner.com/2010/09/how-to-serialize-java-...

Zasada działania jest dobra, ale jak w swoim kodzie daje:

import org.codehaus.jackson.annotate.JsonAutoDetect;


To mam błąd:

- The import org.codehaus cannot be resolved


Jak go naprawić? W pom.xml mam:


<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.9</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.9</version>
</dependency>

konto usunięte

Temat: SimpleDateFormat parse to Date

Ja uzywam takiego dependency:


<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.8</version>
</dependency>


Zapewnie po dociagnieciu LIBa, nie masz go w classpathKamil Szokaluk edytował(a) ten post dnia 09.01.13 o godzinie 17:41
Krzysztof T.

Krzysztof T. Umysł nie jest
naczyniem, które
trzeba napełnić,
lecz ogn...

Temat: SimpleDateFormat parse to Date

Klasa Java.util.Date jest bardzo uboga i trudna w konwertowaniu. W wielu firmach odchodzi się od stosowania java.util.Date.

IMHO powinieneś poczytać o JSR-310 i bibliotece Joda Time (ma być w Java 8).

konto usunięte

Temat: SimpleDateFormat parse to Date

Tak tak, ciagnac dodatkowego liba do obslugi formatowania daty
Krzysztof Telka:
Klasa Java.util.Date jest bardzo uboga i trudna w konwertowaniu. W wielu firmach odchodzi się od stosowania java.util.Date.

IMHO powinieneś poczytać o JSR-310 i bibliotece Joda Time (ma być w Java 8).
Krzysztof T.

Krzysztof T. Umysł nie jest
naczyniem, które
trzeba napełnić,
lecz ogn...

Temat: SimpleDateFormat parse to Date

Nie pisałem by dociągać, czy dodawać - patrzysz zbyt krótkowzrocznie.

Wyobraź sobie sytuację, że Twoja aplikacja jest używana globalnie, np:

Kraków, Paryż, Londyn, Nowy Jork. Gość robi inserta do bazy w Krakowie i wstawia mu datę z jego lokalnej maszyny JVM, a gość w NY odczytuje to i nic mu nie mówi np 16:40 czasu GMT +1, on chce mieć czas wykonania operacji wedle jego czasu i co wtedy?
Podobnie, jak możesz mieć daty newralgiczne - np operacja wykonana jest podczas zmiany czasu z letniego na zimowy i odwrotnie i co wtedy? Error bo java.util.Date nie wie czy wykonałeś operację 30 marca 2013 o godzinie 3:00 (wtedy jest zmiana czasu) i piękny Stacktrace na czerwono.
Klasa Calendar i Date nie ma coś takiego, dlatego chodziło mi o użycie daty w szerszym zakresie.

konto usunięte

Temat: SimpleDateFormat parse to Date

Klasy Calendar i Date maja Date.getTime() i Calendar. get/setTimeInMillis() - wystarczy trzymac w bazie Timestamp.

konto usunięte

Temat: SimpleDateFormat parse to Date

Kto Ci kaze zapisywac date w GMT?
Krzysztof Telka:
Nie pisałem by dociągać, czy dodawać - patrzysz zbyt krótkowzrocznie.

Wyobraź sobie sytuację, że Twoja aplikacja jest używana globalnie, np:

Kraków, Paryż, Londyn, Nowy Jork. Gość robi inserta do bazy w Krakowie i wstawia mu datę z jego lokalnej maszyny JVM, a gość w NY odczytuje to i nic mu nie mówi np 16:40 czasu GMT +1, on chce mieć czas wykonania operacji wedle jego czasu i co wtedy?
Podobnie, jak możesz mieć daty newralgiczne - np operacja wykonana jest podczas zmiany czasu z letniego na zimowy i odwrotnie i co wtedy? Error bo java.util.Date nie wie czy wykonałeś operację 30 marca 2013 o godzinie 3:00 (wtedy jest zmiana czasu) i piękny Stacktrace na czerwono.
Klasa Calendar i Date nie ma coś takiego, dlatego chodziło mi o użycie daty w szerszym zakresie.

konto usunięte

Temat: SimpleDateFormat parse to Date

Zakładam Łukasz, że sugerujesz UTC? :)

Generalnie obsługa dat, godzin, stref czasowych w core JDK to porażka. Joda Time mi się zdecydowanie bardziej podoba i polecam, choć oczywiście nie ma sensu brać całej biblioteki, żeby było łatwiej formatować stringi ;)

konto usunięte

Temat: SimpleDateFormat parse to Date

Wchodzimy teraz w jakies sczegolowe dywagacje, gdy kolega chce po prostu wyswietlic durna date ;)
Zakladam, ze nie jest to jakis twor na rynki miedzynarodowe ...
Piotr Skoczek

Piotr Skoczek SonarMind, Java
Developer

Temat: SimpleDateFormat parse to Date

Dlaczego warto stosować JodaTime:

- API jest spójne i intuicyjne,
- w przeciwieństwie do Date, Calendar nie ma problemów z wielowątkowością (niewiele osób zdaje sobie sprawę że SimpleDateFormat, Calendar etc. nie są bezpieczene wielowątkowo),
- będziesz uczył się i używał biblioteki , która już wkrótce będzie częścią Java core,

Przykład wyświetlenia aktualnej daty według formatu:
new DateTime().toString("yyyy-MM-dd");

Zgodnie z regułami 'Agile Software Craftsmanship' , kod jest czystszy co jest dodatkowym atutem.
W moim przypadku o wiele łatwiej przyszło zaimplementowanie arytmetyki na datach, niż gdybym miał używać akutalnego JDK.

Oczywiście zgadzam się, że nie należy przystawiać armaty do muchy, ale tak jak moi poprzednicy po prostu polecam JodaTime, gdyż pisze się przyjemniej, a chyba o to w tym wszystkim chodzi.

Pozdrawiam.Piotr Skoczek edytował(a) ten post dnia 24.01.13 o godzinie 08:38

Następna dyskusja:

Fast date




Wyślij zaproszenie do