この記事は主にJava8の新しいDateとTimeのAPIの実戦について書いています。新しい Date クラスと Time クラスは、Java 開発者コミュニティからの待望のリクエストの結果です。 Java8 より前に存在した Date クラスは常に批判されており、多くの人がサードパーティの日付ライブラリ joda-time を使用することを選択しています。 Java8 の日付と時刻 API は、jodatime の作成者によって開発され、JSR310 のすべての内容を実装しています。これらの新しい API は java.time パッケージの下にあります。
サードパーティの joda-time と date4j はすでに十分強力であるのに、なぜ Java8 でそれらを再実装する必要があるのでしょうか? 理由の 1 つは、これらのサードパーティのライブラリには、標準の JSF 日付コンバーターや、 joda -time API は互換性がありません。使用するたびに独自のコンバーターを作成する必要があるため、JSR310 では、そのすべての規定が java8 で実装されています。新しい Date クラスと Time クラスの背後にある
設計原則Java8 より前では、Date クラスは変更可能なクラスでした。マルチスレッド環境で使用する場合、プログラマは Date オブジェクトがスレッドセーフであることを確認する必要があります。 Java 8 の Date and Time API は、スレッドセーフな不変クラスを提供します。プログラマは同時実行性の問題を考慮する必要はありません。
ドメインモデル 駆動型 設計方法論 新しい日付と時刻のカテゴリは、「ドメイン駆動型設計」に続きます。開発者はメソッドとクラスの機能を簡単に理解できます。
次に、新しい日付と時刻 API を見てみましょう:
java.time.LocalDate:LocalDate は日付のみを提供しますが、時間情報は提供しません。これは不変でスレッドセーフです。
package org.smarttechie; import java.time.LocalDate; import java.time.temporal.ChronoUnit; /** * This class demonstrates JAVA 8 data and time API * @author Siva Prasad Rao Janapati * */ public class DateTimeDemonstration { /** * @param args */ public static void main(String[] args) { //Create date LocalDate localDate = LocalDate.now(); System.out.println("The local date is :: " + localDate); //Find the length of the month. That is, how many days are there for this month. System.out.println("The number of days available for this month:: " + localDate.lengthOfMonth()); //Know the month name System.out.println("What is the month name? :: " + localDate.getMonth().name()); //add 2 days to the today's date. System.out.println(localDate.plus(2, ChronoUnit.DAYS)); //substract 2 days from today System.out.println(localDate.minus(2, ChronoUnit.DAYS)); //Convert the string to date System.out.println(localDate.parse("2017-04-07")); } }
LocalTime は時間のみを提供しますが、日付情報は提供しません。これは不変クラスでスレッドセーフです。
package org.smarttechie; import java.time.LocalTime; import java.time.temporal.ChronoUnit; /** * This class demonstrates JAVA 8 data and time API * @author Siva Prasad Rao Janapati * */ public class DateTimeDemonstration { /** * @param args */ public static void main(String[] args) { //Get local time LocalTime localTime = LocalTime.now(); System.out.println(localTime); //Get the hour of the day System.out.println("The hour of the day:: " + localTime.getHour()); //add 2 hours to the time. System.out.println(localTime.plus(2, ChronoUnit.HOURS)); //add 6 minutes to the time. System.out.println(localTime.plusMinutes(6)); //substract 2 hours from current time System.out.println(localTime.minus(2, ChronoUnit.HOURS)); } }
LocalDateTimeは時刻と日付の情報を提供します。これは不変クラスでスレッドセーフです。
package orr.smarttechie; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; /** * This class demonstrates JAVA 8 data and time API * @author Siva Prasad Rao Janapati * */ public class DateTimeDemonstration { /** * @param args */ public static void main(String[] args) { //Get LocalDateTime object LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDateTime); //Find the length of month. That is, how many days are there for this month. System.out.println("The number of days available for this month:: " + localDateTime.getMonth().length(true)); //Know the month name System.out.println("What is the month name? :: " + localDateTime.getMonth().name()); //add 2 days to today's date. System.out.println(localDateTime.plus(2, ChronoUnit.DAYS)); //substract 2 days from today System.out.println(localDateTime.minus(2, ChronoUnit.DAYS)); } }
Yearは年の情報を提供します。不変クラスでスレッドセーフです。
package orr.smarttechie; import java.time.Year; import java.time.temporal.ChronoUnit; /** * This class demonstrates JAVA 8 data and time API * @author Siva Prasad Rao Janapati * */ public class DateTimeDemonstration { /** * @param args */ public static void main(String[] args) { //Get year Year year = Year.now(); System.out.println("Year ::" + year); //know the year is leap year or not System.out.println("Is year[" +year+"] leap year?"+ year.isLeap()); } }
Duration は、指定された 2 つの日付の間に何秒とミリ秒が含まれるかを計算するために使用されます。これは不変クラスであり、スレッドセーフです
java.time.Period :。 Period は、指定された 2 つの日付の間に何日、何ヶ月、何年があるかを計算するために使用されます。これは不変クラスであり、スレッドセーフです
以上がJava 8 の新しい Date および Time クラスの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。