English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
قام Java 8 بتقديم دعمًا إضافيًا لتعامل التاريخ والوقت من خلال نشر API الجديدة لتاريخ الوقت (JSR 310).
في إصدارات Java القديمة، كان هناك العديد من المشاكل في API لتاريخ الوقت، من بينها:
غير آمنة للتعامل معها بين الأطراف المختلفة − java.util.Date غير آمنة للتعامل معها بين الأطراف المختلفة، جميع كلاسيكيات التاريخ في Java قابلة للتغيير، وهي واحدة من أكبر مشاكل كلاسيكيات التاريخ في Java.
Design is very bad − The definitions of Java's date/time classes are inconsistent. There are date classes in both the java.util and java.sql packages, and the classes used for formatting and parsing are defined in the java.text package. java.util.Date contains both date and time, while java.sql.Date only contains date. It is not reasonable to include it in the java.sql package. Moreover, both classes have the same name, which is a very poor design.
Time zone handling is麻烦 − The date class does not provide internationalization and does not support time zones, so Java introduced the java.util.Calendar and java.util.TimeZone classes, but they also have all the above problems.
Java 8 in java.time The package provides many new APIs. The following are two important APIs:
Local(local) − Simplifies the handling of date and time without time zone issues.
Zoned(time zone) − Handle date and time through a specified time zone.
The new java.time package covers all operations on date, time, date/time, time zone, instants, durations, and clocks.
LocalDate/LocalTime and LocalDateTime classes are not necessary when dealing with time zones. The code is as follows:
import java.time.LocalDate; import java.time.LocalTime; import java.time.LocalDateTime; import java.time.Month; public class Java8Tester { public static void main(String args[]){ Java8Tester java8tester = new Java8Tester(); java8tester.testLocalDateTime(); {} public void testLocalDateTime(){ // get current date and time LocalDateTime currentTime = LocalDateTime.now(); System.out.println("current time: " + currentTime); LocalDate date1 = currentTime.toLocalDate(); System.out.println("date1: " + date1); Month month = currentTime.getMonth(); int day = currentTime.getDayOfMonth(); int seconds = currentTime.getSecond(); System.out.println("الشهر: " + month +", اليوم: " + day +", الثانية: " + seconds); LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012); System.out.println("date2: " + date2); // 12 ديسمبر 2014 LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12); System.out.println("date3: " + date3); // 22 ساعة 15 دقيقة LocalTime date4 = LocalTime.of(22, 15); System.out.println("date4: " + date4); // تحليل السلسلة LocalTime date5 = LocalTime.parse("20:15:30"); System.out.println("date5: " + date5); {} {}
تنفيذ السكربت المذكور أعلاه، الناتج هو:
$ javac Java8Tester.java $ java Java8Tester الوقت الحالي: 2016-04-15T16:55:48.668 date1: 2016-04-15 الشهر: APRIL, اليوم: 15, الثانية: 48 date2: 2012-04-10T16:55:48.668 date3: 2014-12-12 date4: 22:15 date5: 20:15:30
إذا كان علينا النظر في الوقت المناطقي، يمكننا استخدام API تاريخ الوقت المناطقي:
import java.time.ZonedDateTime; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]){ Java8Tester java8tester = new Java8Tester(); java8tester.testZonedDateTime(); {} public void testZonedDateTime(){ // الحصول على التاريخ والوقت الحالي ZonedDateTime date1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]"); System.out.println("date1: " + date1); ZoneId id = ZoneId.of("Europe/Paris"); System.out.println("ZoneId: " + id); ZoneId currentZone = ZoneId.systemDefault(); System.out.println("المنطقة الزمنية الحالية: " + currentZone); {} {}
تنفيذ السكربت المذكور أعلاه، الناتج هو:
$ javac Java8Tester.java $ java Java8Tester date1: 2015-12-03T10:15:30+08:00[Asia/Shanghai] ZoneId: Europe/Paris المنطقة الزمنية الحالية: Asia/Shanghai