Sitemap

Java Migrating LocalDateTime

3 min readFeb 11, 2025

--

Merhabalar,

Java’da söz konusu zaman ve tarih işlemleri olunca işler karışıyor. Aslında çok basit değil mi? Sadece mevcut zamanın 1 ay sonrasını ekranda çıktı olarak görmek istiyoruz. Burada işlerin karışmasının en önemli sebebi, bu isteklerimizi birden fazla yöntemle yapabiliyor olmamız(Gregorian, Calendar, Date, LocalDate, ZonedDate).

Bu konuda Java bize bazı tavsiyelerde bulunuyor.

import java.util.Date;
import java.sql.*;

kütüphanelerini zaman işlemlerinde kullanmamamız gerektiğini söylüyor. Peki bunların yerine ne tercih edeceğiz? LocalDate, LocalDateTime

O zaman büyüklerimizin sözünü dinleyip değişikliklerimizi yapalım.

  • İçinde bulunduğumuz zamanı 202502111452 gibi bir formatla görüntüleme;

Legacy

    public static String getDateTime(){
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
return df.format(new Date());
}

Change

    public static String getDateTime() {
LocalDateTime dateTime = LocalDateTime.now();
return dateTime.format(ENUM_DATE_FORMAT.DATETIME.get());
}
  • İki tarih arasındaki farkı gün olarak getiren metod;

Legacy

    public static Long getDayDiff(String bastar, String bittar) {
try {
DateFormat df = new SimpleDateFormat("yyyyMMdd");
Date dateStart = df.parse(bastar);
Date dateEnd = df.parse(bittar);
return Math.round((dateEnd.getTime() - dateStart.getTime()) / (double) 86400000);
} catch (Exception e) {
// err
}
return 0L;
}

Change

    public static Long getDayDiff(String bastar, String bittar) {
try {
LocalDate fromDate = LocalDate.parse(bastar, ENUM_DATE_FORMAT.DATE.get());
LocalDate toDate = LocalDate.parse(bittar, ENUM_DATE_FORMAT.DATE.get());
return ChronoUnit.DAYS.between(fromDate, toDate);
} catch (Exception e) {
// err
}
return 0L;
}
  • içinde bulunduğumuz zamanın 1 ay sonrasını görüntüleme

Legacy

    public static String getOptimeAddMonth(int add) {
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
return df.format(DateUtils.addMonths(new Date(), add));
}

Change

    public static String getOptimeAddMonth(int add) {
LocalDateTime dateTime = LocalDateTime.now().plusMonths(add);
return dateTime.format(ENUM_DATE_FORMAT.DATETIME.get());
}

Yeni formatlarda Enum class kullanıldığını fark etmişsinizdir.

public enum ENUM_DATE_FORMAT {
DATE("yyyyMMdd"),
DATETIME("yyyyMMddHHmmss");

private final String format;

public DateTimeFormatter get() {
return DateTimeFormatter.ofPattern(format);
}

ENUM_DATE_FORMAT(String format) {
this.format = format;
}
}

Date&Time API
LocalDate : Sadece gün, ay, yıl bilgisiyle ilgilenir.
* Metodları
now() : Bugünü getirir.
— LocalDate today = LocalDate.now(); // 2022–05–27

Get Huseyin Baduk’s stories in your inbox

Join Medium for free to get updates from this writer.

of() : Belirtilen bir tarih atanır.
— LocalDate birthday = LocalDate.of(1996, 9, 27); // 1996–09–27

withYear() : Mevcut olan tarihin yılını değiştirir.
— LocalDate changeYear = birthday.withYear(2022); // 2022–09–27

plus() minus() : Mevcut tarihten ileri geri gider
— LocalDate birthdayPlus = birthday.plusDays(10); // 1996–10–07
— LocalDate birthdayMinus = birthday.minusYears(100); // 1896–10–07

getDayOfMonth() : Mevcut tarihin gününe ulaşabiliriz
— int dayOfMonth = birthday.getDayOfMonth(); // 27

LocalTime : Sadece saat, dakika, saniye bilgisiyle ilgilenir.
* Metodları
now() : Anlık olarak zaman bilgisini verir
— LocalTime anlik = LocalTime.now(); // 14:39:46.561287306 (çalıştırılan cihazın saat bilgisini verir)

of() : Belirtilen zaman atanır.
— LocalTime ofTime = LocalTime.of(23, 59, 59); // 23:59:59

parse() : String ifade zamana dönüştürülür.
— LocalTime parseTime = LocalTime.parse(“11:30”); // 11:30

getHour() : Mevcut saate ulaşabiliriz
— int hour = LocalTime.now().getHour(); // 14

LocalDateTime : LocalTime ve DateTime sınıflarının birleşimidir.
* Metodları
now() : // 2019–08–07T14:45:31.556654900
of() : LocalDateTime.of(1996, 9, 27, 12, 30); // 1996–09–27T12:30
getYear(): suankitarihvezaman.getYear(); // 2022

* Formatter
LocalDateTime myDateObj = LocalDateTime.now();
DateTimeFormatter myFormatObj = DateTimeFormatter.ofPattern(“dd-MM-yyyy HH:mm:ss”);
String formattedDate = myDateObj.format(myFormatObj);

ZoneId : Farklı zaman dilimleri için kullanılır.
* Metodları
ZoneId defaultZone = ZoneId.systemDefault();
// GMT
ZoneId customZone = ZoneId.of(“Europe/Istanbul”);
// Europe/Istanbul

ZonedDateTime : LocalDateTime gibi çalışır
* Metodları
now() : ZonedDateTime.now(); // 2022–05–30T07:16:02.048991780Z[GMT]
of()
ZoneId losAngeles = ZoneId.of(“America/Los_Angeles”);
ZonedDateTime zonedDateTimeInAmerica = ZonedDateTime.now(losAngeles);
// 2022–05–30T00:15:27.518673971–07:00[America/Los_Angeles]
now.getHour() — zonedDateTimeInAmerica.getHour();
// 7

Period ve Duration
— Period iki tarih arasındaki fark ile ilgilenir. Duration ise iki zaman arasındaki farkla ilgilenir.
* Metodları
1992–02–05 ve 1995–10–17
Period between = Period.between(date1, date2);
between.getDays(); // 12 (takvim günü farkı)

Temporal Adjuster
— Ayın ilk günü, bir sonraki pazar, sonraki ayın ilk günü, sonraki yılın ilk günü,
* Metodları
LocalDate localDate = LocalDate.now();
LocalDate firstSunday = localDate.with(TemporalAdjusters.firstDayOfMonth()).with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
firstSunday;
// 2022–05–08 (ayın ilk gününü seç bir sonraki pazar gününe git)

LocalDate nextThursday = localDate.with(TemporalAdjusters.next(DayOfWeek.THURSDAY));
nextThursday;
// 2022–06–02 (bir sonraki perşembe)

Umarım faydalı olmuştur.

Tavsiyelerinizi yorumlarda yazarsanız sevinirim, iyi çalışmalar

--

--