הגדר את אזור הזמן של תאריך ב- Java
1. סקירה כללית
במדריך מהיר זה נראה כיצד להגדיר את אזור הזמן של תאריך באמצעות Java 7, Java 8 וספריית Joda-Time.
2. שימוש ב- Java 8
Java 8 הציגה ממשק API חדש של Date-Time לעבודה עם תאריכים ושעות שהתבסס במידה רבה על ספריית Joda-Time.
ה רֶגַע class מ- Java Date Time API מעצב נקודה מיידית אחת על ציר הזמן ב- UTC. זה מייצג את ספירת הננו-שניות מאז תקופת הרגע הראשון של 1970 UTC.
ראשית, נשיג את הזרם רֶגַע משעון המערכת ו ZoneId לשם אזור זמן:
מיידי nowUtc = Instant.now (); ZoneId asiaSingapore = ZoneId.of ("אסיה / סינגפור");
סוף - סוף, ה ZoneId ו רֶגַע ניתן להשתמש בהם ליצירת אובייקט תאריך שעה עם פרטי אזור הזמן. ה ZonedDateTime מחלקה מייצגת זמן תאריך עם אזור זמן במערכת לוח השנה ISO-8601:
ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant (nowUtc, asiaSingapore);
השתמשנו ב- Java 8 ZonedDateTime כדי לייצג תאריך שעה עם אזור זמן.
3. שימוש ב- Java 7
ב- Java 7, הגדרת אזור הזמן היא קצת מסובכת. ה תַאֲרִיך class (המייצג רגע ספציפי בזמן) אינו מכיל מידע על אזור הזמן.
ראשית, בואו נקבל את תאריך ה- UTC הנוכחי ו אזור זמן לְהִתְנַגֵד:
תאריך nowUtc = תאריך חדש (); TimeZone asiaSingapore = TimeZone.getTimeZone (timeZone);
ב- Java 7 עלינו להשתמש ב- לוּחַ שָׁנָה בכיתה לייצוג תאריך עם אזור זמן.
לבסוף, אנו יכולים ליצור nowUtc לוח שנה עם ה אסיה סינגפור TimeZone וקבע את השעה:
לוח שנה nowAsiaSingapore = Calendar.getInstance (asiaSingapore); nowAsiaSingapore.setTime (nowUtc);
מומלץ להימנע מ- API 7 של תאריך Java 7 לטובת API 8 של Java date of API או מספריית Joda-Time.
4. שימוש בג'ודה-טיים
אם Java 8 אינו אפשרות, אנחנו עדיין יכולים להשיג את אותו סוג של תוצאות מ- Joda-Time, תקן דה-פקטו לפעולות מועד בעולם לפני ה- Java 8.
ראשית, עלינו להוסיף את התלות בג'ודה-טיים pom.xml:
joda-time joda-time 2.10
כדי לייצג נקודה מדויקת על ציר הזמן אנו יכולים להשתמש רֶגַע מ org.joda.time חֲבִילָה. באופן פנימי, הכיתה מחזיקה פיסת נתונים אחת, הרגע כמו אלפיות השנייה מתקופת ג'אווה של 1970-01-01T00: 00: 00Z:
מיידי nowUtc = Instant.now ();
נשתמש DateTimeZone לייצג אזור זמן (עבור מזהה אזור הזמן שצוין):
DateTimeZone asiaSingapore = DateTimeZone.forID ("אסיה / סינגפור");
עכשיו ה nowUtc הזמן יומר לא תאריך שעה חפץ באמצעות מידע על אזור הזמן:
DateTime nowAsiaSingapore = nowUtc.toDateTime (asiaSingapore);
כך ניתן להשתמש ב- Joda-time API לשילוב מידע על תאריך ואזור זמן.
5. מסקנה
במאמר זה גילינו כיצד להגדיר את אזור הזמן ב- Java באמצעות Java 7, 8 ו- Joda-Time API. למידע נוסף על התמיכה במועד תאריך Java 8, עיין במבוא שלנו ב- Java 8 למועד.
כמו תמיד קטע הקוד זמין במאגר GitHub.