Zielony Smok - logo witryny

Klasa java.util.Date

Klasa java.util.Date jest nieco przestarzała. Większość konstruktorów i metod tej klasy została zabroniona (deprecated – uznaję za zakaz). Klasa nie uwzględnia lokalizacji i stref czasowych, ani możliwości istnienia różnych kalendarzy. Ciągle jednak jest używana.

Rok – liczony od roku 1900 do roku 9999, ale podawany po odjęciu 1900, czyli od 0 do 8099.

Miesiące są oznaczane numerycznie od 0. Grudzień ma więc numer 11.

Dni miesiąca są liczone od 1

Godziny są liczone od 0 do 23.

Minuty są liczone od 0 do 59.

Sekundy są liczone do 0 do 59. Wartość 60 i 61 mogą się zdarzyć w momencie, gdy czas światowy jest korygowany o 1 sekundę przestępną.

Podane zakresy nie są weryfikowane. 32 stycznia będzie odczytane jako 1 lutego.

Konstruktory

  • Date() tworzy datę bieżącą
  • Date(long date) – argument jest czasem w milisekundach, który upłynął od 1 stycznia 1970 r. 00:00:00 GMT. Powstaje wynikowa data
package dt02.java_util_date;
import java.util.*;
public class Listing002 {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println("teraz: " + now);
    }
}
teraz: Fri Sep 28 08:06:56 CEST 2018

CEST to Central European Summer Time.

package dt02.java_util_date;
import java.util.*;
public class Listing003 {
    public static void main(String[] args) {
        long l = System.currentTimeMillis();
        System.out.println("currentTimeMillis: " + l);
        Date now = new Date(l);
        System.out.println("teraz: " + now);
    }
}
currentTimeMillis: 1538115003351
teraz: Fri Sep 28 08:10:03 CEST 2018

Metody

Metody klasy java.util.Date
Zwraca Metoda Opis
boolean after(Date when) Sprawdza czy ta data jest po dacie when
boolean before(Date when) Sprawdza czy ta data jest przed datą when
Object clone() Klonuje obiekt
int compareTo(Date anotherDate) Porównuje tę datę z inną datą. jeśli ta data jest większa zwraca 1, jeśli są równe 0, jeśli jest mniejsza -1
boolean equals(Object obj) Sprawdza czy daty są równe
Date Date.from(Instant instant) Pobiera obiekt Date z obiektu klasy Instant z pakietu util.time. Będziemy o tym mówili oddzielnie.
long getTime() Pobiera czas z tej daty
int hashCode() Oblicza kod mieszający dla tej daty. Z 64-bitowego longa pobierana jest prawa połowa bitów. Następnie wykonywana jest operacja alternatywy wykluczającej XOR co sprowadza wartość wynikającą do 32 bitów: (int)(this.getTime()^(this.getTime()>>>32))
void setTime(long milis) Ustawia datę dla czasu podanego w milisekundach liczonych od 1 stycznia 1970 r. godz. 00:00:00 GTM
Instant toInstant() Zamienia tę datę na obiekt klasy Instant z pakietu java.time. Będziemy o tym mówili oddzielnie
String toString() Zamienia tę datę na string
package dt02.java_util_date;
import java.time.*;
import java.util.*;
public class Listing004 {
    public static void main(String[] args) {
        GregorianCalendar cal = new GregorianCalendar(1952, 5, 4);
        long t = cal.getTimeInMillis();
        System.out.println(t);
        Date date = new Date();
        date.setTime(-554691600000L);
        System.out.println(date.toString());
        Date today = new Date();
        boolean po = today.after(date);
        System.out.println(po);
        boolean przed = today.before(date);
        System.out.println(przed);
        int b = today.compareTo(date);
        System.out.println(b);
        Date date2 = Date.from(Instant.now());
        System.out.println(date2);
        Instant ints = date2.toInstant();
        System.out.println(ints);
    }
}
-554691600000
Wed Jun 04 00:00:00 CET 1952
true
false
1
Fri Sep 28 08:17:20 CEST 2018
2018-09-28T06:17:20.774Z

Godzina różni się o 2 godziny od faktycznej. Różnicę wyjaśnimy przy omawianiu klas z pakietu java.time.

CET to Central European Time.