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).
GO TO FULL VERSION