JavaRush /בלוג Java /Random-HE /מדריך Java 8. חלק 2.
ramhead
רָמָה

מדריך Java 8. חלק 2.

פורסם בקבוצה

API של תאריך

Java 8 מכיל ממשקי API חדשים לגמרי של תאריך ושעה בחבילת java.time. ה-Date API החדש דומה לספריית Joda-Time , אולם הוא אינו זהה. הדוגמאות הבאות יכסו את החלקים החשובים ביותר של ה-API החדש.
שָׁעוֹן
שעון נותן גישה לתאריך ולשעה הנוכחיים. שעונים מודעים לאזורי זמן ולכן ניתן להשתמש בהם במקום System.currentTimeMillis() כדי להחזיר את הזמן הנוכחי באלפיות שניות. סוג זה של דיוק זמן מיוצג גם על ידי המחלקה Instant . ניתן להשתמש במיידיות ליצירת אובייקטי java.util.Date שעברו בירושה . Clock clock = Clock.systemDefaultZone(); long millis = clock.millis(); Instant instant = clock.instant(); Date legacyDate = Date.from(instant); // legacy java.util.Date
אזורי זמן
אזורי זמן מיוצגים על ידי המחלקה המופשטת ZoneId . ניתן לגשת אליהם בקלות באמצעות שיטות מפעל סטטיסטיות. אזורי זמן מגדירים קיזוזים שחשובים להמרה בין תאריך ושעה מיידיים למקומיים. 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]
זמן מקומי
LocalTime מציג את השעה ללא אזור זמן, למשל 17:30:15. הדוגמה הבאה יוצרת שני אובייקטי זמן מקומיים עבור אזורי הזמן שהוגדרו לעיל. לאחר מכן נשווה בין שני העצמים ונחשב את ההבדל בשעות ודקות ביניהם. 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 מגיע עם שיטות מפעל שונות כדי להקל על המופע, כולל ניתוח מחרוזות. 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 מציג תאריך ספציפי, למשל 2014-03-11. המופעים אינם ניתנים לשינוי ופועלים בדומה ל-LocalTime. הדוגמה מדגימה כיצד לחשב תאריך חדש על ידי הוספה או חיסור של ימים, חודשים או שנים. זכור שכל פעולה על אובייקט מחזירה אובייקט חדש. 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 ממחרוזת הוא פשוט כמו ניתוח LocalTime: 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 מציג את תאריך השעה. זהו שילוב של התאריך והשעה המפורטים לעיל, בעותק אחד. מופעי LocalDateTime אינם ניתנים לשינוי ופועלים בדומה ל-LocalTime ול-LocalDate. אנו יכולים להשתמש בשיטות כדי לאחזר את ערכי מאפיין המופע שאנו צריכים: 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 יחד עם מידע נוסף על אזור זמן, ניתן להמיר את המופע לאינסטנט. ניתן להמיר מיידיות בקלות לסוגים הישנים שיורשים מ-java.util.Date. Instant instant = sylvester .atZone(ZoneId.systemDefault()) .toInstant(); Date legacyDate = Date.from(instant); System.out.println(legacyDate); // Wed Dec 31 23:59:59 CET 2014 עיצוב תאריך-שעה פועל באותו אופן כמו עיצוב תאריך או שעה. במקום להשתמש בפורמטים מוגדרים מראש של תאריך, אנו יכולים להשתמש בפורמטים מוגדרים ידנית. 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, ה-DateTimeFormatter החדש אינו ניתן לשינוי ובטוח בשרשור. למידע נוסף על התחביר לכתיבת פורמטים, קרא כאן .

הערות

ניתן לחזור על הערות ב-Java 8. בואו נסתכל על דוגמה כדי להמחיש איך זה עובד. כדי להתחיל, נגדיר מעטפת הערות המאחסנת מערך של הערות חוקיות: @interface Hints { Hint[] value(); } @Repeatable(Hints.class) @interface Hint { String value(); } Java 8 מאפשרת לנו להשתמש במספר הערות מאותו סוג על ידי הכרזת ההערה @Repeatable. אפשרות 1: שימוש בהערת המכולה (הבית ספר הישן) (Java 8 מאפשרת לנו להשתמש בהערות מרובות מאותו סוג על ידי הכרזה על הערת @Repeatable .) אפשרות 1: שימוש במיכל ההערות (בבית הספר הישן) @Hints({@Hint("hint1"), @Hint("hint2")}) class Person {} אפשרות 2: שימוש בהערות חוזרות ( תכונה חדשה) @Hint("hint1") @Hint("hint2") class Person {} באמצעות אפשרות שנייה, מהדר Java מגדיר באופן מרומז את ההערה @Hint. זה חשוב לקריאת מידע הערות באמצעות רפלקציה. Hint 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 למרות שלא הכרזנו את ההערה @Hints עבור המחלקה Person , ניתן לקרוא אותה באמצעות השיטה getAnnotation(Hints.class) . עם זאת, שיטה נוחה יותר היא getAnnotationsByType , המספקת גישה לכל ההערות באמצעות הערת @Hint . בנוסף, השימוש בהערות ב-Java 8 מתרחב לשתי מטרות: @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @interface MyAnnotation {}

זה הכל

המדריך שלי לתכנות Java 8 הושלם. אם אתה רוצה ללמוד עוד על כל המחלקות החדשות ותכונות ה-API ב-JDK 8, פשוט קרא את המאמר הבא שלי. זה יעזור לך להבין את כל המחלקות החדשות והתכונות הנסתרות ב-JDK 8, כגון Arrays.parallelSort , StampedLock ו- ComletableFuture .
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION