Klasa java.time.Duration
Obiekt klasy reprezentuje czas trwania (odcinek czasu). Odcinek ten nie ma odniesienia do konkretnej daty określającej początek albo koniec tego odcinka czasu Obiekt posiada pole long określające liczbę sekund oraz pole int reprezentujące odcinek czasu liczony w nanosekundach. Jednostka DAYS pozwala na podanie czasu w dniach zamiast w sekundach – wówczas przez dzień rozumie się dokładnie 24 godz.
Odcinek czasu może być liczbą ujemną.
Dokładne znaczenie sekundy jest wytłumaczone w klasie Instant
.
Przy porównywaniu obiektów Duration
należy używać metody equals
.
Obiekt jest nie mutowalny (niezmienny) i bezpieczny wątkowo.
Klasa posiada posiada statyczne pole Duration.ZERO
Klasa ma rozliczne metody do obsługi obiektów.
Metody
Zwraca | Metoda | Opis | Listing |
---|---|---|---|
Duration | abs() | Zwraca kopię po obliczeniu wartości absolutnej | 100 |
Temporal | addTo(Temporal) | Dodaje ten czas trwania do podanego obiektu Temporal | 104 |
int | compareTo(Duration) | Porównuje ten obiekt z podanym obiektem. Zwraca ), gdy są jednakowe, 1 gdy pierwszy jest większy, -1 gdy pierwszy jest krótszy. |
101 |
Duration | dividedBy(long) | Zwraca kopię obiektu po podzieleniu przez long. | 105 |
boolean | equals (Object) | porównuje ten czas trwania z podanym. Zwraca true jeśli są równe, false w przeciwnym przypadku | 101 |
long | get(TemporalUnit) | Podaje czas trwania przeliczony na podaną jednostkę. Można pobrać wyłącznie sekundy i nanosekundy | 102 |
int | getNano() | Zwraca liczę nanosekund w sekundzie tego obiektu | 103 |
long | getSeconds() | Zwraca liczbę sekund w tym odcinku czasu | 103 |
List<TemporalUnit> | getUnits() | Zwraca listę jednostek czasu dostarczanych przez ten obiekt Duration | 103 |
boolean | isNegative() | Zwraca true, jeśli odcinek czasu jest ujemny (nie bierze pod uwagę zera) | 103 |
boolean | isZero() | Zwraca true, jeśli ten odcinek czasu jest zerowy | 103 |
Duration | minus(Duration) | Zwraca kopię po odjęciu podanego odcinka czasu | 101 |
Duration | minus(long, TemporalUnit) | Zwraca kopię po odjęciu podanej liczby podanych jednostek czasowych | 104 |
Duration |
minusDays(long) |
Zwraca kopię po odjęciu wskazanej liczby jednostek czasowych określonych w nazwie metody. W przypadku dni są to 24-godzinne dni |
104 |
Duration | multipliedBy(long) | Zwraca kopię obiektu po wcześniejszym pomnożeniu przez podaną liczbę | 105 |
Duration | negated() | Zwraca kopię po zmianie znaku. | 104 |
Duration | plus(Duration) | Zwraca kopię obiektu po wcześniejszym dodaniu podanego odcinka czasowego | 102 |
Duration | plus(long, TemporalUnit) | Zwraca kopię obiektu po wcześniejszym dodaniu podane liczby podanych jednostek czasowych | 102 |
Duration |
plusDays(long) |
Zwraca kopię obiektu po wcześniejszym dodaniu podanej liczby jednostek czasu wskazanych w nazwie metody. |
102 |
Temporal | substractFrom(Temporal) | Odejmuje ten czas trwania od podanego obiektu Temporal | 104 |
long |
toDays() |
Oblicza ile podanych w nazwie metody jednostek czasu mieści się w tym czasie trwania i zwraca tę liczbę |
101 |
String | toString() | Podanej ten obiekt jako łańcuch znaków zgodnie z normą ISO-8601 np. jako PT8H6M12.345S | 106 |
Dration | withNanos (int) | Zwraca kopię tego okresu czasu z podaną liczbą nanosekund | 106 |
Duration | withSeconds(long) | Zwraca kopię tego okresu czasu z podaną ilością sekund | 106 |
Metody statyczne
Zwraca | Metoda | Opis | Listing |
---|---|---|---|
Duration | Duration.between(Temporal t1, temporal t2) | Oblicza i zwraca odcinek czasu Duration pomiędzy t1 (włączony), a t2 (wyłączony) | 100 |
Duration | Duration.from(TemporalAmount) | Przelicza podaną ilość czasu (np. Period) i zwraca jako obiekt Duration. | – |
Duration | Duration.of(long, TemporalUnit) | Przelicza podaną liczbę podanych jednostek czasu i zwraca jako obiekt Duration | 102 |
Duration |
Duration.ofDays(long) |
Przelicza podaną liczbę jednostek czasu określonych w nazwie metody i zwraca jako obiekt Duration | 102 |
Duration | Duration.ofSeconds(long sec, long nano) | Przelicza podaną liczbę sekund na obiekt Duration z uwzględnieniem podanej liczby nanosekund | 105 |
Duration | Duration.parse(CharSequence) | Parsuje podany tekst (w formacie PnDTnHnMn.nS) i zwraca jako obiekt Duration. Objaśnienia w rozdziale poświęconej normie ISO-8601:2004 |
106 |
Listingi
Listing100
package dt20.java_time_duration; import java.time.*; public class Listing100 { public static void main(String[] args) { //Podajemy datę urodzenia LocalDateTime born = LocalDateTime.of(1952, 6, 4, 18, 30); //Uzyskujemy chwilę bieżącą LocalDateTime today = LocalDateTime.now(); //Obliczamy odcinek czasu między urodzinami a teraz Duration d1 = Duration.between(born, today); //Drukujemy na konsoli. System.out.println("d1: " + d1); //Obliczamy odcinek czasu od teraz do urodzin Duration d2 = Duration.between(today, born); //Drukujemy na konsoli. System.out.println("d2: " + d2); //Obliczamy wartość absolutną Duration d3 = d2.abs(); //Drukujemy na konsoli System.out.println("d3: " + d3); } }
Listing101
package dt20.java_time_duration; import java.time.*; public class Listing101 { public static void main(String[] args) { //Podajemy datę urodzenia LocalDateTime born1 = LocalDateTime.of(1952, 6, 4, 18, 30); LocalDateTime born2 = LocalDateTime.of(1983, 1, 17, 21, 5); //Uzyskujemy chwilę bieżącą LocalDateTime today = LocalDateTime.now(); //Obliczamy odcinek czasu między urodzinami a teraz Duration d1 = Duration.between(born1, today); Duration d2 = Duration.between(born2, today); //Porównujemy obiekty boolean b1 = d1.equals(d2); int comp1 = d1.compareTo(d2); System.out.println("b1: " + b1); System.out.println("comp1: " + comp1); //Odejmujemy odcinek 2 do 1 Duration d3 = d1.minus(d2); System.out.println("d3: " + d3); //Obliczamy ile to dni long dl = d3.toDays(); System.out.println("d1: " + dl); } }
Listing102
package dt20.java_time_duration; import java.time.*; import java.time.temporal.*; public class Listing102 { public static void main(String[] args) { //Tworzymy odcinek czasu równy 1000 dni Duration d1 = Duration.of(1000, ChronoUnit.DAYS); System.out.println("d1: " + d1); //Tworzymy odcinek czasu równy 1000 godzin Duration d2 = Duration.ofHours(1000); System.out.println("d2: " + d2); //Dodajemy odcinki czasu Duration d3 = d1.plus(d2); System.out.println("d3: " + d3); //Dodajemy trzy godziny Duration d4 = d3.plusDays(3); System.out.println("d4: " + d4); //Przeliczamy na sekundy long len1 = d4.get(ChronoUnit.SECONDS); System.out.println("len 1: " + len1); //Dodajemy trzy dni Duration d5 = d4.plus(3, ChronoUnit.DAYS); System.out.println("d5: " + d5); } }
Listing103
package dt20.java_time_duration; import java.time.*; import java.time.temporal.*; import java.util.*; public class Listing103 { public static void main(String[] args) { //Podajemy datę urodzenia LocalDateTime born = LocalDateTime.of(1952, 6, 4, 18, 30); //Uzyskujemy chwilę bieżącą LocalDateTime today = LocalDateTime.now(); //Obliczamy odcinek czasu między urodzinami a teraz Duration d1 = Duration.between(born, today); //Drukujemy na konsoli. System.out.println("d1: " + d1); //Pobieramy sekundy long s1 = d1.getSeconds(); System.out.println("s1: " + s1); //pobieramy nanosekundy long n1 = d1.getNano(); System.out.println("n1: " + n1); List<TemporalUnit> list = d1.getUnits(); System.out.println("list: " + list); //Sprawdzamy czy odcinek czasu jest ujemny boolean b1 = d1.isNegative(); System.out.println("b1: " + b1); //Sprawdzamy czy odcinek czasu jest zerowy boolean b2 = d1.isZero(); System.out.println("b2: " + b2); } }
Listing104
package dt20.java_time_duration; import java.time.*; import java.time.temporal.*; public class Listing104 { public static void main(String[] args) { LocalDateTime today = LocalDateTime.now(); System.out.println(today); //Tworzymy odcinek czasowy 1000 dni Duration d1 = Duration.of(1000, ChronoUnit.DAYS); System.out.println("d1: " + d1); //Dodajemy d1 do today LocalDateTime tomorow = (LocalDateTime) d1.addTo(today); System.out.println("tomorow: " + tomorow); //Odejmujemy d1 pd tomorow LocalDateTime today2 = (LocalDateTime) d1.subtractFrom(tomorow); System.out.println("today2: " + today2); //Odejmujemy 4 dni od d1 Duration d2 = d1.minus(4, ChronoUnit.DAYS); System.out.println("d2: " + d2); //Odejmujemy jeszcze 4 godziny Duration d3 = d2.minusHours(4); System.out.println("d3: " + d3); //negujemy d3 Duration d4 = d3.negated(); System.out.println("d4: " + d4); } }
Listing105
package dt20.java_time_duration; import java.time.*; import java.time.temporal.*; public class Listing105 { public static void main(String[] args) { //Tworzymy okres czasu 1000 sek i 1000000 nano Duration d1 = Duration.ofSeconds(1000, 1000000); System.out.println("d1: " + d1); //Mnożymy ten odcinek czasu przez 1000 Duration d2 = d1.multipliedBy(1000); System.out.println("d2: " + d2); //Dzielimy d2 przez 10000 Duration d3 = d2.dividedBy(10000); System.out.println("d3: " + d3); //Ustalamy liczbę sekund dla d3 na 300 Duration d4 = d3.withSeconds(300); System.out.println("d4: " + d4); //Ustalamy liczbę nanosekund dla d4 na 200 Duration d5 = d4.withNanos(200); System.out.println("d5: " + d5); //Tworzymy odcinek czasu z ilości czasu Duration d6 = Duration.from(Duration.of(1000, ChronoUnit.SECONDS)); System.out.println("d6: " + d6); } }
Listing106
package dt20.java_time_duration; import java.time.*; public class Listing106 { public static void main(String[] args) { //Podajemy datę urodzenia LocalDateTime born = LocalDateTime.of(1952, 6, 4, 18, 30); //Uzyskujemy chwilę bieżącą LocalDateTime today = LocalDateTime.now(); //Obliczamy odcinek czasu między urodzinami a teraz Duration d1 = Duration.between(born, today); //Drukujemy na konsoli. String str = d1.toString(); System.out.println("str: " + str); Duration d2 = Duration.parse(str); System.out.println("d2: " + d2); } }