java.util.Date לעומת java.sql.Date

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

במדריך זה נשווה בין שני שיעורי תאריכים: java.util.Date ו java.sql.Date.

ברגע שנשלים את ההשוואה, יהיה ברור באיזה מהאפשר להשתמש ולמה.

2. java.util.Date

ה java.util.Date הכיתה מייצגת רגע מסוים בזמן, עם דיוק באלפיות השנייה מאז ה- 1 בינואר 1970 00:00:00 GMT (זמן העידן). הכיתה משמשת לשמירה על זמן אוניברסלי מתואם (UTC).

אנו יכולים לאתחל אותו בשתי דרכים.

על ידי התקשרות לבנאי:

תאריך תאריך = תאריך חדש ();

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

או על ידי העברת מספר אלפיות השנייה מאז התקופה:

חותמת זמן ארוכה = 1532516399000; // 25 ביולי 2018 10:59:59 UTC תאריך תאריך = תאריך חדש (חותמת זמן);

נציין כי בונים אחרים, שנמצאו לפני Java 8, הוצאו משימוש כעת.

למרות זאת, תַאֲרִיך יש מספר בעיות ובאופן כללי השימוש בו אינו מומלץ יותר.

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

date.setTime (0); // 01 בינואר 1970 00:00:00

למידע נוסף על היתרונות של אובייקטים בלתי ניתנים לשינוי, עיין במאמר זה: אובייקטים בלתי ניתנים לשינוי ב- Java.

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

רוב מערכות ההפעלה המודרניות משתמשות ביום אחד = 24 שעות ביממה x 60 מ 'x 60 שניות = 86400 שניות, שכפי שאנו רואים לא לוקח בחשבון את "הקפיצה השנייה".

עם הצגת Java 8, java.time יש להשתמש בחבילה. לפני Java 8, פתרון חלופי היה זמין - זמן ג'ודה.

3. java.sql.Date

ה java.sql.Date מרחיב java.util.Date מעמד.

מטרתו העיקרית היא לייצג את SQL DATE, השומר על שנים, חודשים וימים. לא נשמרים נתוני זמן.

למעשה, התאריך נשמר באלפיות השנייה החל מה -1 בינואר 1970 00:00:00 GMT וחלק הזמן מנורמל, כלומר מוגדר לאפס.

בעיקרון, זה עטיפה מסביב java.util.Date המטפל בדרישות ספציפיות ל- SQL. java.sql.Date יש להשתמש רק כאשר מתמודדים עם מאגרי מידע.

עם זאת, כ java.sql.Date אינו מחזיק במידע על אזור זמן, המרת אזור הזמן בין הסביבה המקומית שלנו לשרת מסד הנתונים תלויה ביישום של מנהל ההתקן JDBC. זה מוסיף רמה נוספת של מורכבות.

לסיום, נציין, על מנת לתמוך בסוגי נתונים אחרים של SQL: SQL TIME ו- SQL TIMESTAMP, שניים נוספים java.sql שיעורים זמינים: זְמַן ו חותמת זמן.

האחרון, למרות שהוא משתרע על java.util.Date, תומך בננו שניות.

4. מסקנה

מעמד java.util.Date מאחסן ערך תאריך כשני אלפיות השנייה מאז התקופה. java.sql.Date מאחסן ערך תאריך בלבד ומשמש בדרך כלל ב- JDBC.

הטיפול בתאריכים הוא מסובך. עלינו לזכור מקרים מיוחדים: שניות מעוברות, אזורי זמן שונים וכו 'כאשר אנו עוסקים ב- JDBC אנו יכולים להשתמש java.sql.Date בזהירות.

אם נשתמש java.util.Date, עלינו לזכור את חסרונותיה. אם אתה משתמש ב- Java 8 עדיף לא להשתמש java.util.Date בכלל.