Java 8 java.time paketində tamamilə yeni tarix və vaxt API-lərini ehtiva edir. Yeni Date API Joda-Time kitabxanası ilə müqayisə edilə bilər , lakin eyni deyil. Aşağıdakı nümunələr yeni API-nin ən vacib hissələrini əhatə edəcək.
Saat
Saat cari tarix və vaxta giriş imkanı verir. Saatlar saat qurşaqlarından xəbərdardır və buna görə də cari vaxtı millisaniyələrlə qaytarmaq üçün
System.currentTimeMillis() əvəzinə istifadə edilə bilər. Bu cür vaxt dəqiqliyi
Instant sinfi ilə də təmsil olunur .
Anilər irsi java.util.Date obyektlərini yaratmaq üçün istifadə edilə bilər .
Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
Saat qurşağı
Saat qurşağı mücərrəd sinif
ZoneId ilə təmsil olunur . Onlara statistik zavod metodlarından istifadə etməklə asanlıqla daxil olmaq olar. Saat qurşağı ani və yerli tarix və vaxt arasında konvertasiya üçün vacib olan ofsetləri müəyyən edir.
System.out.println(ZoneId.getAvailableZoneIds()); // prints all available timezone ids ZoneId zone1 = ZoneId.of("Europe/Berlin"); ZoneId zone2 = ZoneId.of("Brazil/East"); System.out.println(zone1.getRules()); System.out.println(zone2.getRules()); // ZoneRules[currentStandardOffset=+01:00] // ZoneRules[currentStandardOffset=-03:00]
Yerli vaxt
LocalTime vaxt zonası olmadan vaxtı göstərir, məsələn, 17:30:15. Aşağıdakı nümunə yuxarıda müəyyən edilmiş vaxt zonaları üçün iki yerli vaxt obyekti yaradır. Sonra iki obyekti müqayisə edirik və aralarındakı saat və dəqiqə fərqini hesablayırıq.
LocalTime now1 = LocalTime.now(zone1); LocalTime now2 = LocalTime.now(zone2); System.out.println(now1.isBefore(now2)); // false long hoursBetween = ChronoUnit.HOURS.between(now1, now2); long minutesBetween = ChronoUnit.MINUTES.between(now1, now2); System.out.println(hoursBetween); // -3 System.out.println(minutesBetween); // -239 LocalTime sətir təhlili də daxil olmaqla nümunələşdirməni asanlaşdırmaq üçün müxtəlif zavod üsulları ilə gəlir.
LocalTime late = LocalTime.of(23, 59, 59); System.out.println(late); // 23:59:59 DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedTime(FormatStyle.SHORT) .withLocale(Locale.GERMAN); LocalTime leetTime = LocalTime.parse("13:37", germanFormatter); System.out.println(leetTime); // 13:37
LocalDate
LocalDate müəyyən bir tarixi göstərir, məsələn, 2014-03-11. Nümunələr dəyişməzdir və LocalTime kimi işləyir. Nümunə günləri, ayları və ya illəri əlavə etmək və ya çıxmaqla yeni tarixin necə hesablanacağını nümayiş etdirir. Nəzərə alın ki, obyekt üzərində hər əməliyyat yeni bir obyekt qaytarır.
LocalDate today = LocalDate.now(); LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS); LocalDate yesterday = tomorrow.minusDays(2); LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4); DayOfWeek dayOfWeek = independenceDay.getDayOfWeek(); System.out.println(dayOfWeek); // FRIDAY LocalDate-i sətirdən təhlil etmək LocalTime-i təhlil etmək qədər sadədir:
DateTimeFormatter germanFormatter = DateTimeFormatter .ofLocalizedDate(FormatStyle.MEDIUM) .withLocale(Locale.GERMAN); LocalDate xmas = LocalDate.parse("24.12.2014", germanFormatter); System.out.println(xmas); // 2014-12-24
LocalDateTime
LocalDateTime tarix vaxtı göstərir. Bu, bir nüsxədə yuxarıda verilmiş tarix və vaxtın birləşməsidir. LocalDateTime nümunələri dəyişməzdir və LocalTime və LocalDate ilə eyni şəkildə işləyir. Bizə lazım olan nümunə mülkiyyəti dəyərlərini əldə etmək üçün üsullardan istifadə edə bilərik:
LocalDateTime sylvester = LocalDateTime.of(2014, Month.DECEMBER, 31, 23, 59, 59); DayOfWeek dayOfWeek = sylvester.getDayOfWeek(); System.out.println(dayOfWeek); // WEDNESDAY Month month = sylvester.getMonth(); System.out.println(month); // DECEMBER long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY); System.out.println(minuteOfDay); // 1439 Əlavə vaxt qurşağı məlumatı ilə birlikdə nümunə aniyə çevrilə bilər. Anilər asanlıqla java.util.Date-dən miras qalan köhnə növlərə çevrilə bilər.
Instant instant = sylvester .atZone(ZoneId.systemDefault()) .toInstant(); Date legacyDate = Date.from(instant); System.out.println(legacyDate); // Wed Dec 31 23:59:59 CET 2014 Tarix-vaxtın formatlanması tarix və ya vaxtı formatlaşdırmaqla eyni şəkildə işləyir. Əvvəlcədən təyin edilmiş tarix formatlarından istifadə etmək əvəzinə, biz əl ilə müəyyən edilmiş formatlardan istifadə edə bilərik.
DateTimeFormatter formatter = DateTimeFormatter .ofPattern("MMM dd, yyyy - HH:mm"); LocalDateTime parsed = LocalDateTime.parse("Nov 03, 2014 - 07:13", formatter); String string = formatter.format(parsed); System.out.println(string); // Nov 03, 2014 - 07:13 java.text.NumberFormat-dan fərqli olaraq, yeni DateTimeFormatter dəyişməz və mövzu üçün təhlükəsizdir. Yazı formatlarının sintaksisi haqqında ətraflı məlumat üçün
burada oxuyun .
Annotasiyalar
Java 8-də qeydlər təkrarlanır. Bunun necə işlədiyini göstərmək üçün bir nümunəyə baxaq. Başlamaq üçün bir sıra etibarlı annotasiyaları saxlayan annotasiya sarğısını təyin edəcəyik:
@interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 bizə @Repeatable annotasiyasını elan etməklə eyni tipli çoxsaylı annotasiyalardan istifadə etməyə imkan verir.
Seçim 1: Konteyner annotasiyasından istifadə (köhnə məktəb) (Java 8 bizə @Repeatable annotasiyasını elan etməklə eyni tipli çoxsaylı annotasiyalardan istifadə etməyə imkan verir .) Seçim 1: Annotasiya konteynerindən istifadə (köhnə məktəb)
@Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} Seçim 2: Təkrarlanan annotasiyalardan istifadə ( yeni xüsusiyyət)
@Hint("hint1") @Hint("hint2") class Person {} İkinci seçimdən istifadə edərək, java kompilyatoru gizli şəkildə @Hint annotasiyasını təyin edir. Bu, annotasiya məlumatlarını əks etdirərək oxumaq üçün vacibdir.
Person sinfi üçün
@HintsHint hint = Person.class.getAnnotation(Hint.class); System.out.println(hint); // null Hints hints1 = Person.class.getAnnotation(Hints.class); System.out.println(hints1.value().length); // 2 Hint[] hints2 = Person.class.getAnnotationsByType(Hint.class); System.out.println(hints2.length); // 2 annotasiyasını elan etməsək də , onu
getAnnotation(Hints.class) metodundan istifadə etməklə oxumaq olar . Bununla belə, daha rahat üsul
getAnnotationsByType- dir ki, bu da @Hint annotasiyasından istifadə edərək bütün annotasiyalara girişi təmin edir . Bundan əlavə, Java 8-də annotasiyaların istifadəsi iki məqsədlə genişlənir:
@Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}
Hamısı budur
Java 8 Proqramlaşdırma Təlimliyim tamamlandı. JDK 8-dəki bütün yeni siniflər və API xüsusiyyətləri haqqında daha çox öyrənmək istəyirsinizsə, növbəti məqaləmi oxumağınız kifayətdir.
Bu, Arrays.parallelSort ,
StampedLock və
CompletableFuture kimi JDK 8-də bütün yeni sinifləri və gizli xüsusiyyətləri başa düşməyə kömək edəcək .
GO TO FULL VERSION