המר בין java.time.Instant ו- java.sql.Timestamp
1. סקירה כללית
שניהם java.time. מיידי ו java.sql. חותמת זמן שיעורים מייצגים נקודה על ציר הזמן ב- UTC. במילים אחרות, הם מייצגים את מספר הננו-שניות מאז תקופת ג'אווה.
במדריך מהיר זה, נמיר אחד לשני באמצעות שיטות Java מובנות.
2. המרה רֶגַע ל חותמת זמן ובחזרה
אנחנו יכולים להשתמש Timestamp.from () להמיר רֶגַעאל חותמות זמן:
מיידי מיידי = Instant.now (); חותמת זמן חותמת זמן = Timestamp.from (מיידי); assertEquals (instant.toEpochMilli (), timestamp.getTime ());
ולהיפך, נוכל להשתמש Timestamp.toInstant () להמיר חותמת זמןs לתוך רֶגַעs: כך או כך, גם ה רֶגַע ו חותמת זמן מייצג את אותה נקודה בציר הזמן. לאחר מכן, בואו נסתכל על האינטראקציה בין שתי הכיתות ואזור הזמן. קורא toString () עַל רֶגַע ו חותמת זמן מתנהג אחרת ביחס לאזור הזמן.Instant.toString () מחזירה את השעה באזור הזמן של UTC. מצד שני, Timezone.toString () מחזיר את הזמן באזור הזמן של המכונה המקומית. בואו נראה מה אנחנו מקבלים כשמתקשרים toString () עַל רֶגַע ו אזור זמן בהתאמה: הנה, timestamp.toString () הביא לזמן שהוא 5 שעות 30 דקות לאחר הזמן שהוחזר על ידי instant.toString (). הסיבה לכך היא שאזור הזמן של המכונה המקומית הוא ב- GMT +5: 30 אזור זמן. התפוקה של toString () השיטה שונה, אך שניהם חותמת זמן ו רֶגַע מייצגים את אותה נקודה על ציר הזמן. אנו יכולים גם לאמת זאת על ידי המרת ה- חותמת זמן לאזור הזמן של UTC: במדריך מהיר זה ראינו כיצד להמיר בין java.time. מיידי ו java.sql. חותמת זמן שיעורים בג'אווה בשיטות מובנות. בדקנו גם כיצד אזור הזמן משפיע על שינוי הפלט. וכמו תמיד, דוגמאות הקוד המלאות זמינות ב- GitHub.מיידי = חותמת זמן.אינסטנט (); assertEquals (instant.toEpochMilli (), timestamp.getTime ());
3. toString () הבדלים בשיטה
מיידי (ב- UTC): 2018-10-18T00: 00: 57.907Z חותמת זמן (ב- GMT +05: 30): 2018-10-18 05: 30: 57.907
DateFormat df = DateFormat.getDateTimeInstance (); df = חדש SimpleDateFormat ("yyyy-MM-dd'T'HH: mm: ss: SS'Z '"); df.setTimeZone (TimeZone.getTimeZone ("UTC")); assertEquals (instant.toString (), df.format (חותמת זמן). toString ());
4. מסקנה