package com.test.datetime.java8; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; public class DateTimeTest { public static void main(String[] args) { LocalDate date=LocalDate.now(); LocalTime time=LocalTime.now(); LocalDateTime dateTime=LocalDateTime.now(); System.out.println("date:"+date); System.out.println("time:"+time); System.out.println("dateTime:"+dateTime); System.out.println(date.getDayOfMonth()+"."+ date.getMonthValue()+"."+date.getYear()); System.out.println(time.getHour()+":"+ time.getMinute()+":"+time.getSecond()); System.out.println(dateTime.getDayOfMonth()+"."+ dateTime.getMonthValue()+"."+dateTime.getYear()+ " "+dateTime.getHour()+":"+ dateTime.getMinute()+":"+dateTime.getSecond()); } }LocalDate, ay, gün ve yıl bilgisini tutar, LocalTime saat, dakika, saniye bilgilerini saklar, LocalDateTime ise hem date hem de time bilgilerini saklamaktadır. Yukarıdaki uygulama çalıştırıldığında aşağıdaki gibi çıktı alınabilir : date:2016-10-18 time:15:59:01.573 dateTime:2016-10-18T15:59:01.573 18.10.2016 15:59:1 18.10.2016 15:59:1
package com.test.datetime.java8; import java.time.LocalDate; public class DateTimeUpdateTest { public static void main(String[] args) { LocalDate date=LocalDate.of(1919,5,19); System.out.println("date:"+date); LocalDate dateNow=LocalDate.now(); LocalDate updated=dateNow.withYear(1938).withMonth(11).withDayOfMonth(10); System.out.println("date now:"+date); System.out.println("updated:"+updated); LocalDate nowForAdd=LocalDate.now(); LocalDate added=nowForAdd.plusDays(1).plusMonths(2).plusYears(3); System.out.println("date orijinal:"+nowForAdd); System.out.println("added:"+added); LocalDate nowForMinus=LocalDate.now(); LocalDate minused=nowForMinus.minusDays(1).minusMonths(2).minusYears(3); System.out.println("date orijinal:"+nowForMinus); System.out.println("minused:"+minused); } }Uygulama çalıştığında çıktı aşağıdaki gibi olabilir: date:1919-05-19 date now:1919-05-19 updated:1938-11-10 date orijinal:2016-10-20 added:2019-12-21 date orijinal:2016-10-20 minused:2013-08-19 İlk önce LocalDate.of(1919,5,19) ile istenilen bir tarihe göre tarih yaratılmıştır. İkinci olarak yaratılan şimdiki tarih değeri dateNow.withYear(1938).withMonth(11).withDayOfMonth(10) ile 10 kasım 1938 haline getirilmiştir. Üçüncü olarak nowForAdd.plusDays(1).plusMonths(2).plusYears(3) ile bir tarihe 1 gün, 2 ay ve 3 yıl eklenmiştir. Dördüncü olarak da nowForMinus.minusDays(1).minusMonths(2).minusYears(3); bir tarihten 1 gün, 2 ay ve 3 yıl çıkarılmıştır. Tarihlerin orjinal ve değiştirilmiş halleri ekrana basılmıştır. Görüldüğü gibi yapılan işlemler orjinal tarih nesnesini değerlerini değiştirmemiştir.
package com.test.datetime.java8; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; public class TemporalAdjustersTest { public static void main(String[] args) { LocalDate date=LocalDate.now(); System.out.println("ayın ilk günü:"+ date.with(TemporalAdjusters.firstDayOfMonth())); System.out.println("bir sonraki ayın ilk günü:"+ date.with(TemporalAdjusters.firstDayOfNextMonth())); System.out.println("yılın ilk günü:"+ date.with(TemporalAdjusters.firstDayOfYear())); System.out.println("bir sonraki yılın ilk günü:"+ date.with(TemporalAdjusters.firstDayOfNextYear())); System.out.println("ayın son günü:"+ date.with(TemporalAdjusters.lastDayOfMonth())); System.out.println("yılın son günü:"+ date.with(TemporalAdjusters.lastDayOfYear())); System.out.println("ayın ilk cuması:"+ date.with(TemporalAdjusters.firstInMonth(DayOfWeek.FRIDAY))); System.out.println("ayın son cuması:"+ date.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY))); System.out.println("ayın ikinci cuması:"+ date.with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.FRIDAY))); System.out.println("şimdiki tarihten önceki cuma:"+ date.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY))); System.out.println("şimdiki tarihten önceki cuma (bugün cuma ise bugünü tarihi dönülür:"+ date.with(TemporalAdjusters.previousOrSame(DayOfWeek.FRIDAY))); System.out.println("şimdiki tarihten sonraki cuma:"+ date.with(TemporalAdjusters.next(DayOfWeek.FRIDAY))); System.out.println("şimdiki tarihten sonraki cuma (bugün cuma ise bugünü tarihi dönülür:"+ date.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY))); } }Uygulama çalıştığında aşağıdaki gibi bir bilgi basabilir : ayın ilk günü:2016-10-01 bir sonraki ayın ilk günü:2016-11-01 yılın ilk günü:2016-01-01 bir sonraki yılın ilk günü:2017-01-01 ayın son günü:2016-10-31 yılın son günü:2016-12-31 ayın ilk cuması:2016-10-07 ayın son cuması:2016-10-28 ayın ikinci cuması:2016-10-14 şimdiki tarihten önceki cuma:2016-10-14 şimdiki tarihten önceki cuma (bugün cuma ise bugünü tarihi dönülür:2016-10-14 şimdiki tarihten sonraki cuma:2016-10-21 şimdiki tarihten sonraki cuma (bugün cuma ise bugünü tarihi dönülür:2016-10-21 TemporalAdjusters sınıfı, ilk gün, son gün, bir önceki gün gibi tarihle ilgili kullanışlı methodlar içermektedir. Yukarıdaki örnekte önemli method'lar kullanılmıştır.
package com.test.datetime.java8; import java.time.LocalDate; import java.time.Period; public class PeriodTest { public static void main(String[] args) { Period periodMilitary = Period.of(1, 2, 10); System.out.println("periodMilitary : "+periodMilitary); LocalDate returnDate=LocalDate.of(1999,10,10).plus(periodMilitary); System.out.println("returnDate : "+returnDate); LocalDate date1=LocalDate.of(1881, 5, 19); LocalDate date2=LocalDate.of(1938, 11, 10); Period period=Period.between(date1, date2); System.out.println("period : "+period); } }Yukarıdaki örnekte ilk önce 1 yıl, 2 ay ve 10 günlük bir period tanımlıyoruz. İkinci olarak LocalDate.of(1999,10,10) şeklinde bir tarih tanımlıyor ve bu period'u bu tarihe ekliyoruz. En son bölümde ise iki tarih arasındaki farklı period cinsinden alıyoruz. Uygulama çalıştığında aşağıdaki gibi çıktı görülebilir: periodMilitary : P1Y2M10D returnDate : 2000-12-20 period : P57Y5M22D P1Y2M10D , 1 Year, 2 Month, 10 Day ifadesinin kısaltılmış biçimidir. P57Y5M22D ise , 57 yıl, 5 ay ve 22 gün anlamına gelmektedir.
package com.test.datetime.java8; import java.time.Duration; import java.time.LocalTime; public class DurationTest { public static void main(String[] args) { Duration duration=Duration.ofMinutes(10); Duration durationLast = duration.plusHours(1).plusMinutes(20).minusSeconds(10); System.out.println("duration : "+duration); System.out.println("durationLast : "+durationLast); LocalTime time1=LocalTime.of(9, 32, 15); LocalTime time2=LocalTime.of(23, 13, 0); Duration durationBetween=Duration.between(time1,time2); System.out.println("duration between: "+durationBetween); } }Önce 10 dakikalık bir Duration yaratıyoruz. Ardından bu 10 dakikaya 1 saat, 20 dakika ekliyor ve 10 saniye çıkarıyoruz. Alttaki bölümde ise iki duration arasındanki farklı alıyoru ve ekranda bastırıyoruz: duration : PT10M durationLast : PT1H29M50S duration between: PT13H40M45S PT10M , 10 Minute, PT1H29M50S, 1 Hour, 29 Minute ve 50 Second, PT13H40M45S ise 13 Hour, 40 Minute ve 45 Second ifadesinin kısaltılmış halidir.
package com.test.datetime.java8; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; public class DateTimeFormatterTest { public static void main(String[] args) { LocalDateTime datetime=LocalDateTime.now(); System.out.println("Varsayılan biçimlendirme:"+datetime); System.out.println("Basit ISO standartı:" + datetime.format(DateTimeFormatter.BASIC_ISO_DATE)); System.out.println("Temel tiplerden medium : " + datetime.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM))); System.out.println("İsteğe bağlı:" + datetime.format(DateTimeFormatter.ofPattern("dd.MM.yyyy kk:mm:ss"))); } }İlk başta varsayılan biçim ile console'a basılmıştır. İkinci örnekte ISO standartlarına göre basılmıştır. Üçüncü örnek ise MEDIUM (diğer tipler SHORT, FULL, LONG) tipi kullanmıştır. Son örnek ise artık isteğe bağlı bir şekilde desen kullanılmıştır. Ekran çıktısı aşağıdaki gibi olabilir: Varsayılan biçimlendirme:2016-10-20T16:12:18.694 Basit ISO standartı:20161020 Temel tiplerden medium : Oct 20, 2016 İsteğe bağlı:20.10.2016 16:12:18
package com.test.datetime.java8; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class DateTimeParserTest { public static void main(String[] args) { LocalDateTime datetime=LocalDateTime.parse("2016-12-03T10:15:30"); System.out.println("datetime:"+datetime); LocalDate date=LocalDate.parse("2016-12-03"); System.out.println("date:"+date); LocalDate datePattern= LocalDate.parse( "2016/05/03", DateTimeFormatter.ofPattern( "yyyy/MM/dd" ) ); System.out.println("datePattern:"+datePattern); } }İlk örnek varsayılan biçimlerden LocalDateTime tarihini parse etmiştir. Yine varsayılan biçimlerden LocalDate tipinde bir tarih de parse edilmiştir. En son parse işlemi ise doğrudan bir biçim (pattern) vererek yapılmıştır. yyyy/MM/dd biçimine uygun olarak verilen String parse edilmiştir. Uygulamanın çıktısı aşağıdaki gibidir : datetime:2016-12-03T10:15:30 date:2016-12-03 datePattern:2016-05-03