Wątek przeniesiony 2015-09-08 09:12 z Java przez bogdans.

GregorianCalendar , Date

0

Pyt.1.Jaka jest różnica miedzy klasami GregorianCalendar i Date?? czytam o tym w książce Java podstawy Gary Cornell i tak pisza że nie za bardzo rozumie różnic??

Pyt.2. Jak użyje takiej składni:
Date birthday = new Date();

i wywołam zmienna birthday to dostaje np.: Sun Sep 06 12:57:33 CEST 2015

Gdy użyje składni z klasą GregorianCalendar czyli:
GregorianCalendar deadline = new GregorianCalendar();

i wywołam zmienna deatline to dostaje takie dziwadło:

GregorianCalendar[time=1441537264913,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Belgrade",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=119,lastRule=java.util.SimpleTimeZone[id=Europe/Belgrade,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2015,MONTH=8,WEEK_OF_YEAR=36,WEEK_OF_MONTH=1,DAY_OF_MONTH=6,DAY_OF_YEAR=249,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=1,SECOND=4,MILLISECOND=913,ZONE_OFFSET=3600000,DST_OFFSET=3600000]

Dlaczego z klasy Date dostaje ładnie podaną Date a z klasy GregorianCalender taki długi ciąg czegoś, zamiast daty??

0

Może ktoś sensownie odpowiedzieć a nie z prześmiewczo (mam na mysli ta wypowiedź z rakiem)

0

Po prostu nie używaj tego, to jest stara klasa, zła, wszyscy wiedzą że jest do d**y.
Masz jakis powód dlaczego musisz używać tego szajsu, a nie porządnego API dodanego w Javie 8 ??

Ja rozumie, pewnie w książkę z 1970roku jest akurat ta klasa, ale książka to nie jakaś biblia...

0

@niezdecydowany bardzo dobrze ci doradzil, posluchaj go bo wie co pisze.
w wypadku Date toString() ma sens - pokazuje tekstowa reprezentacje daty. w wypadku kalendarza co bys chcial zobaczyc? wszystko co w tym kalendarzu jest? raczej nie ma to sensu. dlatego pokazywane sa metadane obiektu klasy.

0

Po prostu robie pewne ćwiczenia i chce rozumieć różnice miedzy tymi klasami. Tutaj nie chodzi o jakieś używanie profesionalne. Tak na marginesie ja dopiero zaczynam sie javy uczyć i nie wiem wszystkiego. Gdy pytam o cos to bardzo chciałbym odpowiedź konkretnie na to pytanie. Wiec wróćmy do poczatku tego tematu i do moich pytań. Bardzo bede wdzięczny za odpowiedzi. I prosze Was używajcie jak najprostszego jezyka z uwagi na to że sie ucze dopiero javy. Pozdro.

0

Jak zaczynasz to tym bardziej unikaj tego gó!@#wna.

Wracając, czytaj dokumentacje, a tak jest jasno napisane dlaczego Twój toString wygląda dziko

Return a string representation of this calendar. This method is intended to be used only for debugging purposes, and the format of the returned string may vary between implementations. The returned string may be empty but may not be null

0

A prosiłem o proste słowa. Dojde do sprawy bede rozumiał. Prosze Was o fajne wytłumaczenie na pyt.1 i pyt.2.

0

Różnicy miedzy tymi klasami czyli pytania 1 oraz wyświetlania wartosci zmiennych w tych klasach czyli pytanie 2.

0

Pytanie 1.
http://tutorials.jenkov.com/java-date-time/java-util-calendar.html
Pytanie 2. już ci odpowiedziałem

0

To co powiedziałeś nic z tego nie rozumie. Może inaczej od czego jest jedna klasa a od czego druga??
I dlaczego z tym wyświetlaniem zmiennych jest inaczej w klasie Date a inaczej w klasie GregorianCalender.
Czy ktoś prosto własnymi słowami to wytłumaczy??

(zrozumcie to że ja sie zaczynam tego uczyc i nie zawsze słowa książkowe tłumacza to w zrozumiały sposób dla każdego człowieka, potrzebuje zwykłych ludzkich słów)

Jeszcze dopiszę może wtedy mnie zrozmiecie o co mi chodzi.
Cytat z ksiażki:
"Wyrażenie:
GregorianCalendar deadline = new GregorianCalendar()
tworzy nowy obiekt reprezentujący datę i godzinę w chwili jego utworzenia."

I właśnie dlatego pytam o wyświetlanie zmiennych. Gdy wyświetlę zmienną klasy Date wtedy mam date i godzine a gdy wyświetle zmienna klasy GregorianCalender wyskakuje mi dziwny ciag znaków.

0

Przeczytałem, ale nie rozumie. Dlatego prosze o lepsze wytłumaczenie. Może własnie pokazanie różnicy miedzy tymi klasami co one dokładnie robią bo z mojej książki to niee wynika. W poprzednim poscie dopisałem o co mi dokładnie chodzi.

0

zarowno date jak i calendar sluza do reprezentacji biezacej daty i operacji na datach. przy czym date jest prostszy od calendar (ktory oferuje takze lokalizacje i jakies tam dodatkowe operacje). jesli chcesz wiedziec wiecej to doczytaj w dokumentacji, jednak juz lepiej napisac sobie swoj typ do obslugi daty niz z nich korzystac bo sa one po prostu zle :)

0

Ale nie rozumie czemu w GregorianCalender wyświetlanie zmiennej jest inne czyli taki dziwny ciąg niż ze zmiennej klasy Date ??

0

bo autorzy biblioteki tak to sobie sprytnie wymyslili. moze stwierdzili ze skoro klasa nazywa sie 'Calendar' to formatowanie tego jako daty byloby naduzyciem semantycznym.

0

Nie rozumie twojej wypowiedzi. Skoro ksiazka pisze tak:
"Wyrażenie:
GregorianCalendar deadline = new GregorianCalendar()
tworzy nowy obiekt reprezentujący datę i godzinę w chwili jego utworzenia."

To dalej nie wiem dlaczego nie moge wyświetlić tej daty i godziny (z chwili utworzenia) po wywołaniu zmiennej deadline?

=====================

Może inaczej zapytam co tworzy klasa Date a co klasa GregorianCalender ??

0

obie tworza date. wyswietlanie (tzn metoda toString) dziala inaczej. nie skupiaj sie na takich bzdurach tylko idz dalej.

0

Ale GregorianCalender tworzy tylko date danego momentu czyli w chwili utworzenia czy cały roczny kalendarz??

=====
W książce pisze takie zdanie na temat clasy Gregorian calender:

Obiekt klasy GregorianCalendar zawiera pola przechowujące datę, na którą obiekt ten zostanie
ustawiony. Dzięki hermetyzacji nie sposób odgadnąć, jakiej reprezentacji używa ta klasa, nie
zaglądając do jej kodu źródłowego, ale oczywiście dzięki hermetyzacji nie ma to znaczenia.
Znaczenie mają metody udostępniane przez klasę

O co chodzi z ta reprezentacją??

0

Datę można reprezentować na wiele różnych sposobów. Od najprostszych, czyli zapisania wszystkich elementów w osobnych polach klasy poprzez np. przechowywanie tzw. czasu epoki czyli liczby milisekund od 1 stycznia 1970 roku, a kończąc na zapisach dla specyficznych systemów mierzenia czasu np. Chińskiego, Japońskiego czy Żydowskiego.
Klasa GregoraianCalendar reprezentuje kalendarz gregoriański. Reprezentacja tego kalendarza jest jedną z prostszych (przynajmniej w naszym kręgu kulturowym) za pomocą ogólnie przyjętych metod. Jest tam co prawda kilka haczyków, ale nie w tym rzecz.

Chcąc wypisać datę z tego kalendarza możesz użyć np.

public static String format(GregorianCalendar calendar){
    SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy");
    fmt.setCalendar(calendar);
    String dateFormatted = fmt.format(calendar.getTime());
    return dateFormatted;
}

Co do tego co pisał @niezdecydowany, o tym by unikać Date i Calendar to rzeczywiście jeżeli możesz pisać coś od zera to pisz z użyciem nowych klas. Jednak w życiu jest już tak, że 99% aplikacji używa starego API i trzeba je znać.

0

Koziołek nie o to pytałem. Prosiłbym bardzo na odpowiedź na pytania z mojego wcześniejszego posta (czyli z dnia 06.09.2015).

0

Ale przecież dostałeś odpowiedzi w kilku postach

0

Ale GregorianCalender tworzy tylko date danego momentu czyli w chwili utworzenia czy cały roczny kalendarz??

=====
W książce pisze takie zdanie na temat clasy Gregorian calender:

Obiekt klasy GregorianCalendar zawiera pola przechowujące datę, na którą obiekt ten zostanie
ustawiony. Dzięki hermetyzacji nie sposób odgadnąć, jakiej reprezentacji używa ta klasa, nie
zaglądając do jej kodu źródłowego, ale oczywiście dzięki hermetyzacji nie ma to znaczenia.
Znaczenie mają metody udostępniane przez klasę

O co chodzi z ta reprezentacją??


(na to chce dokładnej odpowiedzi bo troche zmodyfikowałem pytanie)

0

ad 2. wywołanie date.toString() zwraca datę w ściśle określonym formacie. Wywołanie calendar.toString() może, zgodnie z dokumentacją, zwrócić cokolwiek i w tym przypadku zwraca wewnętrzną reprezentację daty. Do wyświetlania daty z Calendar używamy formaterów.

ad 1. Klasa Date reprezentuje The class Date represents a specific instant in time, with millisecond precision., czyli mówiąc po ludzku punkt w czasie bez określonego kontekstu. GregorianCalendar reprezentuje GregorianCalendar is a concrete subclass of Calendar and provides the standard calendar system used by most of the world., czyli masz tu nie tylko datę (punkt w czasie), ale też sposób wyznaczania dat.
Calendar przechowuje datę na którą został utworzony oraz ma mechanizm pozwalający na wyznaczanie dowolnej daty zgodnie z danym kalendarzem.

0

Ad.2. Pytałem o reprezentacje bo w książce było używane słowo " konwencja" a potem nagle "reprezentacja", domyślałem sie że może to znaczyc to samo ale nie bylem pewien.

Mam rozumieć że jedno i drugie określa sposób wyświetlenia daty??

Ad.1.
MOJE PRZEMYŚLENIA I PODSUMOWANIE:

Mam rozumieć że klasa Date automatycznie tworzy tylko określony punkt w czasie a dokładnie w momencie utworzenia i tyle. Utworzonej daty z tej klasy nie można modyfikować po utworzeniu, ani ustawiać konkretnej daty za pomoca tej klasy w obiekcie. DOBRZE ROZUMIE??

MECHANIZM:
Ale wydaje mi sie że ta klasa tez musi mieć jakis mechaniżm który pozwala jej wyznaczyc date wg jakiegoś kalendarza, jeżeli ona odmierza milisekundy od 1 stycznia 1970 roku to musi wiedziec jak zmienia sie kalendarz (czyli jak układają sie dni tygodnia , miesiąca w poszczególnym roku.)

------======
A klasa GregorinCalender tez posiada taki lub podobny MECHANIZM tylko że można za pomoca tej klasy ustawić konkretna date , zmodyfikować daną date lub pozwolić tej klasie na automatycznie ustawienie aktualnej daty w obiekcie. DOBRZE ROZUMIE?

DOBRZE ROZMIE OBIE TE KLASY ??? JEŻELI COŚ JEST ŹLE TO POPRAWCIE.

0

ad 1. modyfikacja - dlatego klasa Date jak i całe stare API jest złe, bo stan można zmieniać (są metody set) i tym samym wprowadzać wiele ciekawych błędów do systemu.
Co do mechanizmu to korzysta ona ze standardu POSIX https://en.wikipedia.org/wiki/Unix_time który ma określony kalendarz.

0

W poprzednim poscie przestawiłem moje przemyślenia i zapytałem czy dobrze rozumie i chciałbym o potwierdzenie czy w końcu dobrze zrozumiałem.

A ty koziołek wyskoczyłeś z samym pojeciem modyfikacja i nie wiadomo do czego sie ono tyczy, pisz całym zdaniem w takich przypadkach.

Skoro z POSIX korzysta klasa Date to z czego korzysta GragorianCalender??

0

Koziołek ja Cie teraz w ogóle nie rozumie o co ci chodzi.
Ja napisałem jak ja to rozumie na tą chwile i zapytałem czy dobrze rozumie i oczekuje odpowiedzi typu "dobrze rozumiesz" lub "źle rozumiesz" i w tym przypadku poprawić to to źle rozumie.

0

Nie mogę się powstrzymać bo razi po oczach, pisałem już w komentarzu ale widzę, że muszę jako normalny post.

rozumie**MMMMMMM**

Proszę dodwaj M na końcu tego wyrazu.

0

Mam rozumieć że dobrze zrozumiałem????

0
golec2604 napisał(a):

Mam rozumieć że dobrze zrozumiałem????
jak dolozyc to tego te wszystkie 'nie rozumie' to umre ze smiechu zaraz, bedziesz mnie miec na sumieniu :)
zle zrozumiales. tak jeszcze do twojej informacji - poki tego nie zrozumiesz nie ma sensu dalej sie uczyc, nie ma tez sensu tego sprawdzac w twoim java edytorze ani w dokumentacji. po prostu jestes skazany na ludzi ktorzy nie umieja tlumaczyc na forum.

1 użytkowników online, w tym zalogowanych: 0, gości: 1