18 Ekim 2019 Cuma

Period Sınıfı - Yıl/Ay/Gün Bilir Saat Bilmez

Giriş
Şu satırı dahil ederiz 
import java.time.Period;
Açıklaması şöyle
Quantity of time in terms of years, months, and days. Widely used get the difference between two particular dates or to modify a date.
Period sınıfı, Duration sınıfının aksine java.lang.Comparable arayüzünü gerçekleştirmez.

Period ve Duration Farkı
Period ise saati bilmediği için en küçük çözünürlüğü gün birimindendir. Açıklaması şöyle.
NOTE: java.time.Period only support year, month and day.
NOTE: java.time.Duration support day and time (but not month and year)
Açıklaması şöyle.
A Period is made of a number of years, months and days.
Period ve Duration temel olarak Date Time API manipulation için kullanılır. Şeklen şöyle
Açıklaması şöyle. Yani Period sınıfı LocalDate 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 objects 
1. Period and 
2. Duration. 
The thumb rule is the same, Period works with LocalDate and Duration will work with LocalTime.
Önce Months Alanına Değer Atanır
Örnek
Elimizde şöyle bir kod olsun. Burada aradaki süre 30 gün olduğu için months alanına 1 yazılır. days alanı ise 0 olur.
LocalDate a = LocalDate.of(1992, Month.APRIL, 1);
LocalDate b = LocalDate.of(1992, Month.MAY, 1);
// Calculate the period. It will return "One month"
Period period = Period.between(a, b);
// Add one month to b. It will return June 1, 1992
LocalDate c = b.plus(period);
System.out.println(ChronoUnit.DAYS.between(a, b)); // 30 days as April has 30 days
System.out.println(ChronoUnit.DAYS.between(b, c)); // 31 days as May has 31 days
Kullanım
ofX() metodu ile yaratılan period nesnesine plus() çağrısı ile diğer süreler eklenir. Şöyle yaparız.
Period.ofYears(1).plus(Period.ofWeeks(1));
of metodları sürekli yeni nesne ürettiği için 1 yıl 1 hafta yaratmak için şu kod yanlış. Elimize sadece 1 hafta geçer.
Period wrong = Period.ofYears(1).ofWeeks(1);
between metodu
Açıklaması şöyle. Bitiş günü hesaplamaya dahil edilmez.
The start date is included, but the end date is not.
Örnek
Şöyle yaparız. Çıktı olarak 30 gün alırız.
Period difference = Period.between(01.01.2018,31.01.2018) 
of metodu
Şöyle yaparız
Period.of(1, 1, 1);
Period.ofDays(1);
Period.ofYears(1);
Period.ofMonths(2);
Period.ofWeeks(2);
ofDays metodu
İki LocalData arasında kaç gün olduğunu bulmak için şöyle yaparız.
public static Period getPeriodInDaysBetween(LocalDate from, LocalDate to) {
  int days = (int) from.until(to, ChronoUnit.DAYS);
  return Period.ofDays(days);
}
ofWeeks metodu
Açıklaması şöyle. Yani days alanına değer ataması yapar.
The resulting period will be day-based, with the amount of days equal to the number of weeks multiplied by 7. The years and months units will be zero.
Örnek
Şöyle yaparız.
Period p = Period.ofWeeks(3);
Örnek
ofWeeks ile yazıla days alanına tekrar değer atandığı için şu kullanım yanlış.
Period p = Period.ofWeeks(3);
p = p.withDays(2);
ofYears metodu
Şöyle yaparız.
Period p = Period.ofYears(1);
withDays metodu
Şöyle yaparız. 3 ay 2 gün elde ederiz.
Period p = Period.ofMonths(3);
p = p.withDays(2);

Hiç yorum yok:

Yorum Gönder