מדריך לשיעור שעון ג'אווה

1. סקירה כללית

במדריך זה אנו הולכים הביטו בג'אווה שָׁעוֹן כיתה מה java.time חֲבִילָה. נסביר מה ה שָׁעוֹן הכיתה היא ואיך נוכל להשתמש בה.

2. ה שָׁעוֹן מעמד

שָׁעוֹן נוספה בג'אווה 8 ומספק גישה לרגע בזמן באמצעות שעון המערכת הזמין הטוב ביותר, ולשמש כספק זמן אשר ניתן לאבדו ביעילות למטרות בדיקה.

התאריך והשעה הנוכחיים תלויים באזור הזמן, ועבור יישומים גלובליים, ספק זמן נדרש כדי להבטיח שהתאריך והשעה נוצרים עם אזור הזמן הנכון.

מחלקה זו עוזרת לנו לבדוק שהקוד שלנו משתנה עובד עם אזורי זמן שונים או - כאשר משתמשים בשעון קבוע - הזמן אינו משפיע על הקוד שלנו.

ה שָׁעוֹן הכיתה היא מופשטת, ולכן איננו יכולים ליצור מופע שלה. ניתן להשתמש בשיטות המפעל הבאות:

  • קיזוז (שעון, משך זמן) מחזיר שעון שקוזז על ידי המצוין מֶשֶׁך. המקרה העיקרי לשימוש זה הוא לדמות ריצה בעתיד או בעבר
  • systemUTC () - מחזיר שעון המייצג את אזור הזמן UTC
  • קבוע (מיידי, ZoneId) - תמיד מחזיר אותו דבר רֶגַע. מקרה השימוש המוביל לכך הוא בבדיקות, כאשר השעון הקבוע מבטיח כי הבדיקות אינן תלויות בשעון הנוכחי

אנו נבדוק את רוב השיטות הקיימות ב- שָׁעוֹן מעמד.

2.1. רֶגַע()

שיטה זו מחזירה רגע המייצג את הרגע הנוכחי המוגדר על ידי השעון:

שעון שעון = Clock.systemDefaultZone (); מיידי מיידי = שעון. אינסטנט (); System.out.println (מיידי);

יפיק:

2018-04-07T03: 59: 35.555Z

2.2. systemUTC ()

שיטה זו מחזירה א שָׁעוֹן אובייקט המייצג את הרגע הנוכחי באזור UTC:

שעון שעון = Clock.systemUTC (); System.out.println ("זמן UTC ::" + שעון. אינסטנט ());

יפיק:

זמן UTC :: 2018-04-04T17: 40: 12.353Z

2.3. מערכת()

שיטה סטטית זו מחזירה את ה- שָׁעוֹן אובייקט עבור אזור הזמן שזוהה על ידי מזהה אזור הזמן הנתון:

שעון שעון = Clock.system (ZoneId.of ("אסיה / כלכותה")); System.out.println (clock.instant ());

יפיק:

2018-04-04T18: 00: 31.376Z

2.4. systemDefaultZone ()

שיטה סטטית זו מחזירה א שָׁעוֹן אובייקט המייצג את הרגע הנוכחי ומשתמש באזור הזמן המוגדר כברירת מחדל של המערכת בו הוא פועל:

שעון שעון = Clock.systemDefaultZone (); System.out.println (שעון);

השורות לעיל מניבות את התוצאה הבאה (בהנחה שאזור הזמן המוגדר כברירת מחדל שלנו הוא "אסיה / כלכותה"):

SystemClock [אסיה / כלכותה]

אנו יכולים להשיג את אותה התנהגות על ידי מעבר ZoneId.systemDefault ():

שעון שעון = Clock.system (ZoneId.systemDefault ());

2.5. מיליס ()

שיטה זו מחזירה את הרגע הנוכחי של השעון באלפיות השנייה. זה מסופק כדי לאפשר את השימוש בשעון במקרי שימוש בעלי ביצועים גבוהים שבהם יצירת אובייקט לא תהיה מקובלת. ניתן להשתמש בשיטה זו במקומות שבהם היינו משתמשים אחרת System.currentTimeInMillis ():

שעון שעון = Clock.systemDefaultZone (); System.out.println (clock.millis ());

יפיק:

1523104441258

2.6. לְקַזֵז()

שיטה סטטית זו מחזירה רגע משעון הבסיס שצוין עם התווסף המשך שצוין.

אם משך הזמן שלילי, אז רגע השעון שנוצר יהיה מוקדם יותר משעון הבסיס הנתון.

באמצעות לְקַזֵז, נוכל להשיג רגעים בעבר ובעתיד של שעון הבסיס הנתון. אם נעביר משך אפס נקבל את אותו שעון כמו שעון הבסיס הנתון:

שעון baseClock = Clock.systemDefaultZone (); // שעון התוצאה יהיה מאוחר משעון baseClock Clock = Clock.offset (baseClock, Duration.ofHours (72)); System.out.println (clock5.instant ()); // שעון התוצאה יהיה זהה לשעון baseClock = Clock.offset (baseClock, Duration.ZERO); System.out.println (clock.instant ()); // שעון התוצאה יהיה מוקדם יותר משעון baseClock = Clock.offset (baseClock, Duration.ofHours (-72)); System.out.println (clock.instant ());

יפיק:

2018-04-10T13: 24: 07.347Z 2018-04-07T13: 24: 07.348Z 2018-04-04T13: 24: 07.348Z

2.7. תִקתוּק()

שיטה סטטית זו מחזירה רגעים מהשעון שצוין מעוגל למופע הקרוב ביותר למשך הנקוב. משך השעון שצוין חייב להיות חיובי:

Clock clockDefaultZone = Clock.systemDefaultZone (); שעון שעון = Clock.tick (clockDefaultZone, Duration.ofSeconds (30)); System.out.println ("אזור ברירת המחדל של השעון:" + clockDefaultZone.instant ()); System.out.println ("סימון שעון:" + clocktick.instant ());

יפיק:

אזור ברירת מחדל שעון: 2018-04-07T16: 42: 05.473Z שעון שעון: 2018-04-07T16: 42: 00Z

2.8. tickSeconds ()

שיטה סטטית זו מחזירה את הסימון המיידי הנוכחי בשניות שלמות עבור אזור הזמן הנתון. השעון הזה תמיד יהיה ננו-של-שנייה שדה מוגדר לאפס:

ZoneId zoneId = ZoneId.of ("אסיה / כלכותה"); שעון שעון = Clock.tickSeconds (zoneId); System.out.println (clock.instant ());

יפיק:

2018-04-07T17: 40: 23Z

ניתן להשיג את אותו הדבר באמצעות תִקתוּק():

שעון שעון = Clock.tick (Clock.system (ZoneId.of ("אסיה / כלכותה")), Duration.ofSeconds (1));

2.9. tickMinutes ()

שיטה סטטית זו מחזירה את השעון המתקתק מיידי בדקות שלמות עבור אזור הזמן שצוין. השעון הזה תמיד יהיה ננו-של-שנייה ו דקה שנייה שדות מוגדרים לאפס:

ZoneId zoneId = ZoneId.of ("אסיה / כלכותה"); שעון שעון = Clock.tickMinutes (zoneId); System.out.println (clock.instant ());

יפיק:

2018-04-07T17: 26: 00Z

ניתן להשיג את אותו הדבר באמצעות תִקתוּק():

שעון שעון = Clock.tick (Clock.system (ZoneId.of ("אסיה / כלכותה")), Duration.ofMinutes (1));

2.10. withZone ()

שיטה זו מחזירה עותק של שעון זה עם אזור זמן אחר.

אם יש לנו מופע שעון לאזור זמן מסוים, נוכל ליצור עותק של שעון זה לאזור זמן אחר:

ZoneId zoneSingapore = ZoneId.of ("אסיה / סינגפור"); Clock clockSingapore = Clock.system (zoneSingapore); System.out.println (clockSingapore.instant ()); ZoneId zoneCalcutta = ZoneId.of ("אסיה / כלכותה"); Clock ClockCalcutta = clockSingapore.withZone (zoneCalcutta); System.out.println (clockCalcutta.instant ());

יפיק:

2018-04-07T17: 55: 43.035Z 2018-04-07T17: 55: 43.035Z

2.11. getZone ()

שיטה זו מחזירה את אזור הזמן של הנתון שָׁעוֹן.

שעון שעון = Clock.systemDefaultZone (); ZoneId zone = clock.getZone (); System.out.println (zone.getId ());

יפיק:

אסיה / כלכותה

2.12. תוקן()

שיטה זו מחזירה שעון ש תמיד מחזיר את אותו הרגע. המקרה העיקרי לשימוש בשיטה זו הוא בבדיקות, כאשר השעון הקבוע מבטיח כי הבדיקות אינן תלויות בשעון הנוכחי.

שעון fixedClock = Clock.fixed (Instant.parse ("2018-04-29T10: 15: 30.00Z"), ZoneId.of ("אסיה / כלכותה")); System.out.println (fixedClock);

יפיק:

FixedClock [2018-04-29T10: 15: 30Z, אסיה / כלכותה]

3. מסקנה

במאמר זה אנו צוללים לג'אווה שָׁעוֹן בכיתה ובדרכים השונות בהן אנו יכולים להשתמש בה בשיטות הקיימות.

כמו תמיד, דוגמאות הקוד זמינות ב- GitHub.