Giriş
Şu satırı dahil ederiz
import java.time.Duration;
Açıklaması şöyle
Quantity of time in terms of seconds and nanoseconds.
C#'taki TimeSpan sınıfına yakındır. Period'dan farklı olarak artık yıl, yaz saati gibi şeyleri hesaba katmaz. Duration sınıfının en küçük çözünürlüğü nanosaniye birimindendir.
Açıklaması şöyle. Yani Duration LocalTime veya LocalDateTime nesnelerini değiştirmek için kullanılır.
Java came with a generic way to handle these date manipulations. It comes up with two objects1. Period and2. Duration.The thumb rule is the same, Period works with LocalDate and Duration will work with LocalTime.
Ne Zaman Duration Elde Ederiz?
Örnek - LocalDateTime Çıkartması
Şöyle yaparız.
LocalDateTime startTime = ...
LocalDateTime endTime = ...
Duration totalWaitingDuration = Duration.between(endTime, startTime);
LocalTime ile FarkıLocalTime gibi 23:59:59 sınırı yoktur. Daha uzun süreleri de saklayabilir. LocalTime ile arasındaki en önemli farklı açıklayan cümle şöyle
LocalDateTime is a Temporal and these represent a point in time, not a duration.Bu sınıf kendi içinde saniye ve nanosaniye saklar. Açıklaması şöyle.
Although "1:30:00" can be interpreted as a point and as a duration, the semantics are different.
* As a point in time: "Half past one in the morning"
* As a duration: "An hour and a half"
One reason this is important is that "25:30:02" is a valid duration, but not a valid time-of-day.
This class models a quantity or amount of time in terms of seconds and nanoseconds. [...] The range of a duration requires the storage of a number larger than a long. To achieve this, the class stores a long representing seconds and an int representing nanosecond-of-second, which will always be between 0 and 999,999,999.between metodu
Örnek 1
Şöyle yaparız.
Temporal startInclusive = ...;
Temporal endExclusive = ...;
Duration duration = Duration.between(startInclusive, endExclusive);
Örnek 2Elimizde iki Instant olsun.
Instant start = ...;
Instant stop = ...;
Şöyle yaparız.Duration d = Duration.between (start,stop);
get metoduAçıklaması şöyle.
ÖrnekThis returns a value for each of the two supported units, SECONDS and NANOS. All other units throw an exception.
Şu kod exception fırlatır.
Duration duration = Duration.ofSeconds(3000);
System.out.println(duration.get(ChronoUnit.MINUTES));
Çıktı olarak şunu alırız.java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Minutes
at java.time.Duration.get(Duration.java:537)
getSeconds metoduŞöyle yaparız.
int seconds = duration.getSeconds();
minus metoduŞöyle yaparız.
Duration diff = duration.minus(duration2);
of metoduÖrnek
Şöyle yaparız
Duration.ofHours(1);Duration.ofMinutes(10);Duration.ofSeconds(23);Duration.ofMillis(2323);Duration.ofNanos(45);
Örnek
Şöyle yaparız.
Şöyle yaparız. toString() metodu HMS formatında çıktı verir.
Şöyle yaparız.
Şöyle yaparız.
Format P ile başlar. T time başladığını gösterir. h saati gösterir.
Örnek
Şu girdi yanlış olduğu için parse edilemez.
Şöyle yaparız.
Şöyle yaparız. 98 gün 1 saat 23 dakika 45 saniye eder.
Şöyle yaparız.
Şöyle yaparız.
Toplam saati döndürür. 25 saat gibi bir değer alabiliriz.
Örnek
Şöyle yaparız.
Toplam dakikayı döndürür. 61 dakika gibi bir değer alabiliriz.
Örnek
Şöyle yaparız.
Şöyle yaparız.
ChronoUnit unit = ...;
Duration duration = Duration.of(1, unit).toNanos();
ÖrnekŞöyle yaparız. toString() metodu HMS formatında çıktı verir.
System.out.println(Duration.of(1512431637067L, ChronoUnit.MILLIS));
// output: PT420119H53M57.067S
ofHours metoduŞöyle yaparız.
Duration compared = Duration.ofHours(8);
ofSeconds metoduŞöyle yaparız.
Duration duration = Duration.ofSeconds(3000);
parse metoduFormat P ile başlar. T time başladığını gösterir. h saati gösterir.
Örnek
Şu girdi yanlış olduğu için parse edilemez.
"PT10HMS";
Doğru girdi şöyle olmalı"PT10H0M0S";
ÖrnekŞöyle yaparız.
Duration duration = Duration.parse("PT8h");//8 saat
ÖrnekŞöyle yaparız. 98 gün 1 saat 23 dakika 45 saniye eder.
Duration.parse("P98DT01H23M45S").toMillis();
ÖrnekŞöyle yaparız.
//convert first to a valid Duration representation
String durationStr = input.replaceAll("(\\d+):(\\d+):(\\d+)", "PT$1H$2M$3S");
Duration duration = Duration.parse(durationStr);
int seconds = duration.getSeconds();
plus metodu
Şöyle yaparız.Duration duration = ...;
Duration duration2 = duration.plus(Duration.ofMinutes(30));
plusMinutes metoduŞöyle yaparız.
String[] parts = durationAsString.split(":");
Duration duration = Duration
.ofHours(1)
.plusMinutes(2)
.plusSeconds(3);
toHours metoduToplam saati döndürür. 25 saat gibi bir değer alabiliriz.
Örnek
Şöyle yaparız.
long hours = duration.toHours();
toMinutes metoduToplam dakikayı döndürür. 61 dakika gibi bir değer alabiliriz.
Örnek
Şöyle yaparız.
long minutes = duration.toMinutes();
toNanos metodu
Toplam nanosaniyeyi döndürür.
Şöyle yaparız.
Şöyle yaparız.
Duration duration = ...;
long conversion = duration.toNanos();
toString metodu
HMS formatında çıktı verir. Şöyle yaparız.
HMS formatında çıktı verir. Şöyle yaparız.
System.out.println(Duration.of(1512431637067L, ChronoUnit.MILLIS));
// output: PT420119H53M57.067S
Diğer
Microsaniyeye Çevirme
toMicros() metodu niyeyse yok.
Şöyle yaparız.
Java 8 ile Duration nesnesini String'e çevirmek kolay değil.
Örnek
Birimlerin arasını açmak için şöyle yaparız.
Apache Commons kullanarak H:MM:SS olarak formatlamak için şöyle yaparız.
Eğer saatin 24'ten fazla olmasını istemezsek şöyle yaparız.
Microsaniyeye Çevirme
toMicros() metodu niyeyse yok.
Şöyle yaparız.
final long microseconds = TimeUnit.NANOSECONDS.toMicros(duration.toNanos())
Duration FormatlamaJava 8 ile Duration nesnesini String'e çevirmek kolay değil.
Örnek
Birimlerin arasını açmak için şöyle yaparız.
public static String humanReadableFormat(Duration duration) {
return duration.toString()
.substring(2)
.replaceAll("(\\d[HMS])(?!$)", "$1 ")
.toLowerCase();
}
Çıktı olarak şunu alırız.- 5h
- 7h 15m
- 6h 50m 15s
- 2h 5s
- 0.1s
ÖrnekApache Commons kullanarak H:MM:SS olarak formatlamak için şöyle yaparız.
DurationFormatUtils.formatDuration(totalWaitingDuration.toMillis(), "H:mm:ss", true)
Örnek
H:MM:SS olarak formatlamak için şöyle yaparız.public static String formatDuration(Duration duration) {
long seconds = duration.getSeconds();
long absSeconds = Math.abs(seconds);
String positive = String.format(
"%d:%02d:%02d",
absSeconds / 3600,
(absSeconds % 3600) / 60,
absSeconds % 60);
return seconds < 0 ? "-" + positive : positive;
}
ÖrnekEğer saatin 24'ten fazla olmasını istemezsek şöyle yaparız.
Duration duration = Duration.ofSeconds(3000);
long hours = duration.toHours();
int minutes = (int) ((duration.getSeconds() % (60 * 60)) / 60);
int seconds = (int) (duration.getSeconds() % 60);
System.out.println(hours + ":" + minutes + ":" + seconds);
Hiç yorum yok:
Yorum Gönder