CodeGym /Kurslar /JAVA 25 SELF /LocalDate, LocalTime, LocalDateTime

LocalDate, LocalTime, LocalDateTime

JAVA 25 SELF
Səviyyə , Dərs
Mövcuddur

1. LocalDate: vaxt və zaman qurşağı olmadan tarix

LocalDate — sadəcə tarixdir. Vaxt yoxdur, zaman qurşağı yoxdur, artıq problemlər yoxdur. Təqvimdə bir səhifə kimidir: 2025-06-01 — vəssalam. Əgər müxtəlif şəhərlərdə “gecəyarısının” dəqiq nə vaxt olduğunun sizin üçün önəmi yoxdursa və sizə sadəcə “2025-ci il 1 iyun” lazımdırsa — LocalDate istifadə edin.

LocalDate necə yaradılır?

Bir neçə üsul var və hamısı sadə və rahatdır.

Cari tarix

import java.time.LocalDate;

LocalDate today = LocalDate.now();
System.out.println(today); // Məsələn, 2025-06-01

Müəyyən tarix

LocalDate birthday = LocalDate.of(1990, 12, 15);
System.out.println(birthday); // 1990-12-15

İl, ay və gün üçün ədədlərdən istifadə etmək olar. Ay — 1-dən 12-yə qədər olan rəqəmdir (yanvar — 1, dekabr — 12).

Sətirdən pars etmə

LocalDate parsedDate = LocalDate.parse("2025-06-01");
System.out.println(parsedDate); // 2025-06-01

Sətir yyyy-MM-dd formatında olmalıdır. Format uyğun gəlməsə — istisna atılacaq.

Tarixin komponentlərini almaq

LocalDate-də tarixin ayrı-ayrı hissələrini qaytaran metodlar var:

int year = today.getYear();           // 2025
int month = today.getMonthValue();    // 6 (iyun)
int day = today.getDayOfMonth();      // 1
System.out.println("İl: " + year + ", ay: " + month + ", gün: " + day);

Ayın adını sözlə almaq istəyirsinizsə, getMonth() metodundan istifadə edin:

System.out.println(today.getMonth()); // JUNE

Həftə günü lazımdırsa — getDayOfWeek() metodundan istifadə edin:

System.out.println(today.getDayOfWeek()); // SATURDAY

Praktik nümunə

Tədris məqsədli konsol tətbiqinizi inkişaf etdirməyə davam edirik: artıq o, istifadəçini doğum günü münasibətilə təbrik edə bilər.

import java.time.LocalDate;

public class BirthdayApp {
    public static void main(String[] args) {
        LocalDate birthday = LocalDate.of(2000, 2, 29);
        System.out.println("Doğum tarixi: " + birthday);
        System.out.println("Doğum gününün həftə günü: " + birthday.getDayOfWeek());
    }
}

2. LocalTime: tarixsiz və zaman qurşağı olmadan vaxt

LocalTime — sadəcə vaxtdır: saatlar, dəqiqələr, saniyələr (və hətta nanosaniyələr). Amma tarixsiz! Əgər tarixə bağlanmadan, məsələn, “mağazanın açılış vaxtı” və ya “görüşün başlama vaxtı” kimi məlumatları saxlamaq lazımdırsa — bu sizin sinifinizdir.

LocalTime necə yaradılır?

Cari vaxt

import java.time.LocalTime;

LocalTime now = LocalTime.now();
System.out.println(now); // Məsələn, 14:37:12.123456789

Müəyyən vaxt

LocalTime lunchTime = LocalTime.of(13, 30); // 13:30:00
System.out.println(lunchTime);

Saniyə və nanosaniyələri əlavə etmək olar:

LocalTime precise = LocalTime.of(8, 15, 30, 123_000_000); // 08:15:30.123
System.out.println(precise);

Sətirdən pars etmə

LocalTime parsedTime = LocalTime.parse("14:30:00");
System.out.println(parsedTime); // 14:30

Vaxtın komponentlərini almaq

int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
System.out.println("Saat: " + hour + ", dəqiqə: " + minute + ", saniyə: " + second);

Praktik nümunə

Tətbiqimizə “saat” əlavə edək:

import java.time.LocalTime;

public class ClockApp {
    public static void main(String[] args) {
        LocalTime current = LocalTime.now();
        System.out.println("İndi: " + current);
        System.out.println("Saat: " + current.getHour());
        System.out.println("Dəqiqə: " + current.getMinute());
    }
}

3. LocalDateTime: zaman qurşağı olmadan tarix və vaxt

LocalDateTime — kombodur: tarix + vaxt, amma hələ də zaman qurşağı yoxdur. Məsələn, “2025-06-01 14:30:00”. Planetin harasında oxunmasından asılı olmayaraq bir anı saxlamaq istəyəndə, lakin qurşaqlar barədə düşünmək istəməyəndə əlverişlidir.

LocalDateTime necə yaradılır?

Cari tarix və vaxt

import java.time.LocalDateTime;

LocalDateTime now = LocalDateTime.now();
System.out.println(now); // Məsələn, 2025-06-01T14:30:15.123456789

Müəyyən tarix və vaxt

LocalDateTime meeting = LocalDateTime.of(2025, 6, 1, 14, 30);
System.out.println(meeting); // 2025-06-01T14:30

Saniyə və nanosaniyələri əlavə etmək olar:

LocalDateTime preciseMeeting = LocalDateTime.of(2025, 6, 1, 14, 30, 45, 123_000_000);
System.out.println(preciseMeeting); // 2025-06-01T14:30:45.123

Sətirdən pars etmə

LocalDateTime parsed = LocalDateTime.parse("2025-06-01T14:30:00");
System.out.println(parsed); // 2025-06-01T14:30

Diqqət: ISO standartına görə T hərfi tarixi vaxtdan ayırır.

Komponentləri almaq

int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
System.out.println("Tarix: " + year + "-" + month + "-" + day + " Vaxt: " + hour + ":" + minute);

4. Tarix və vaxtla tipik əməliyyatlar

Artıq tarix və vaxt obyektləri yaratmağı bacardığımıza görə, onlarla faydalı nələr edə biləcəyimizi öyrənək.

Toplama və çıxma

Hər üç sinif (LocalDate, LocalTime, LocalDateTime) dəyişməzdir. Bu o deməkdir ki, plusDays() və ya minusMonths() kimi metodlar yeni obyekt qaytarır, ilkin obyekt isə dəyişməz qalır.

LocalDate

LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);
LocalDate lastMonth = today.minusMonths(1);
System.out.println("Bu gün: " + today);
System.out.println("Sabah: " + tomorrow);
System.out.println("Bir ay əvvəl: " + lastMonth);

LocalTime

LocalTime now = LocalTime.now();
LocalTime inTenMinutes = now.plusMinutes(10);
System.out.println("İndi: " + now);
System.out.println("10 dəqiqədən sonra: " + inTenMinutes);

LocalDateTime

LocalDateTime start = LocalDateTime.of(2025, 6, 1, 14, 0);
LocalDateTime end = start.plusHours(2).minusMinutes(15);
System.out.println("Başlanğıc: " + start);
System.out.println("Son: " + end);

Tarix və vaxtın müqayisəsi

Bütün siniflərdə isBefore(), isAfter(), isEqual() metodları var:

LocalDate birthday = LocalDate.of(2000, 2, 29);
LocalDate today = LocalDate.now();

if (today.isAfter(birthday)) {
    System.out.println("Siz artıq yeni doğulmuşdan daha yaşlısınız!");
}
LocalTime morning = LocalTime.of(8, 0);
LocalTime now = LocalTime.now();

if (now.isBefore(morning)) {
    System.out.println("Hələ qalxmaq tezdir...");
} else {
    System.out.println("Oyanmağın vaxtıdır!");
}

Cari tarix və vaxtın alınması

Artıq gördüyünüz kimi, now() metodları cari dəyərləri qaytarır:

LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();

5. Təcrübə: nümunələr və tapşırıqlar

Nümunə 1: İstənilən tarix üçün həftə günü

import java.time.LocalDate;

public class DayOfWeekApp {
    public static void main(String[] args) {
        LocalDate anyDate = LocalDate.of(2025, 12, 31);
        System.out.println("31 dekabr 2025 — bu " + anyDate.getDayOfWeek());
    }
}

Nümunə 2: Yeni ilə neçə gün qalıb?

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class DaysToNewYear {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate newYear = LocalDate.of(today.getYear() + 1, 1, 1);
        long daysLeft = ChronoUnit.DAYS.between(today, newYear);
        System.out.println("Yeni ilə qədər " + daysLeft + " gün qalıb!");
    }
}

Nümunə 3: İl sıçrayış ilidirmi?

import java.time.LocalDate;

public class LeapYearCheck {
    public static void main(String[] args) {
        LocalDate date = LocalDate.of(2025, 1, 1);
        if (date.isLeapYear()) {
            System.out.println(date.getYear() + " — sıçrayış ilidir!");
        } else {
            System.out.println(date.getYear() + " — adi ildir.");
        }
    }
}

Nümunə 4: İki vaxt arasındakı fərq

import java.time.LocalTime;
import java.time.Duration;

public class TimeDifference {
    public static void main(String[] args) {
        LocalTime start = LocalTime.of(9, 0);
        LocalTime end = LocalTime.of(17, 30);
        Duration duration = Duration.between(start, end);
        System.out.println("İş günü " + duration.toHours() + " saat " +
                (duration.toMinutes() % 60) + " dəqiqə davam edir.");
    }
}

6. Tipik səhvlər

Səhv №1: LocalDateTime ilə ZonedDateTime qarışdırılır.
LocalDateTime zaman qurşağı haqqında məlumat saxlamır! Əgər ölkələr arasında reys cədvəllərini və ya müxtəlif zonalarda baş verən hadisələri saxlayırsınızsa — ZonedDateTime istifadə edin, əks halda sistemlər arasında məlumat ötürülərkən gözlənilməz nəticələr ala bilərsiniz.

Səhv №2: Pars etmək üçün səhv sətir formatından istifadə olunur.
Məsələn, 01.06.2025 sətirini LocalDate.parse() ilə pars etməyə çalışırlar. Susmaya görə 2025-06-01 formatı gözlənilir. Digər formatlar üçün xüsusi DateTimeFormatter lazımdır (bunun haqqında növbəti mühazirədə!).

Səhv №3: plusDays() kimi metodların obyekti dəyişdirdiyini düşünürlər.
Xeyr! Bütün obyektlər dəyişməzdir. Metod yeni obyekt qaytarır, köhnə isə əvvəlki kimi qalır.

Səhv №4: LocalTime mütləq vaxtı saxlamaq üçün istifadə olunur.
LocalTime — yalnız sutkanın lokal vaxtı üçündür. “Zaman anı”nı saxlamaq istəyirsinizsə, Instant və ya ZonedDateTime istifadə edin.

Səhv №5: Ayların fərqini unudurlar (1 — yanvar, 12 — dekabr).
LocalDate.of(year, month, day)-də ay hesablama 1-dən başlayır (bəzi digər dillər və ya köhnə API-lərdə olduğu kimi 0-dan deyil).

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION