日付時刻シリーズはjava.time新しい日付と時刻のAPIクラス7でJava APIパッケージを備え----- Jdk8を

1.不変性

新しい日付/時刻のAPIは、すべてのクラスは、マルチスレッド環境に適している、不変です。

たとえば、次のようにLocalDateTimeを

 

 

 

関心事の分離2.

日付(日付)、時間(タイム)、日付と時刻(日時)、タイムスタンプ(UNIXタイムスタンプ)であり、異なるタイムゾーンを定義する新しいAPIの人間が読めると機械時間の日付と時刻(UNIXタイムスタンプ)明確な分離、クラス。

など、様々なカテゴリーに分け、異なる時間、時:などLOCALDATE、にLocalTime、LocalDateTimeを、インスタント、年、月、YEARMONTH、MONTHDAY、のDayOfWeek、異なるシナリオの様々なニーズにお応えしています。

 

3.クリア

すべてのクラスでは、方法は明らかに同じ動作を達成するために定義されています。

例えば、現在のインスタンスを取得するために、我々は今、()メソッドを使用することができ、すべてのクラスが形式で定義されている中で()およびparse()メソッド、以前のように別々の特別なクラスを持っているのではなく。、明確な明確な、統一された、覚えやすい方法。

 

4.実際の操作

(ツール・メソッドの多くと同等、私たち自身のラップに不要になったが):日から、加算、減算、書式設定の解析:すべての新しい日付/時刻のAPIクラスは、以下のような一般的なタスクを実行する方法の範囲を実装します/時間の別個の部分、等を抽出します。

たとえば、次のLocalDateTimeは、(それぞれのフィールド、フィールドの変更、増減、等を得る変換)非常に豊富な実用的な操作を含んでいます。

 

 

5.TemporalAdjusterは、あなたが日付を操作するために、より洗練された方法を使用することができます

あなたは、それがもはや値に制限されて変更できません、あなたは需要に応じて、独自の日付コンバータを定義することができます。たとえば、次の次の日曜日、翌営業日、または月の最後の日までの日付の変更。

lastDayOfMonthは新しい日付、その値の月の最終日を作成します。

 

6.比較欠点JDK7前の日時と改良されたクラス

6.1 日付とカレンダーは、使用上の問題に不便です

(1)new Date(2019,01,01)实际是3919年2月。因为Date的构造函数 的年份表示的始于1900年的差值。

  LocalDate创建实例:

LocalDate localDate = LocalDate.of(2019, 1, 1);

(2)month是从0开始的。

LocalDate month是从1开始的:

        LocalDate localDate = LocalDate.of(2019, 1, 1);
        System.out.println(localDate.getMonthValue());

输出是1

(3)DAY_OF_WEEK 的取值,是从周日(1)开始的。

LocalDate week是从周一(1)开始的:

        LocalDate localDate = LocalDate.of(2019, 1, 1);
        System.out.println(localDate.getDayOfWeek());
        System.out.println(localDate.getDayOfWeek().getValue());

输出

TUESDAY
2

 

(4)Date如果不格式化,打印出的日期可读性差。

LocalDate的输出,清晰。

        LocalDate localDate = LocalDate.of(2019, 1, 1);
        System.out.println(localDate.getMonthValue());
        System.out.println(localDate.toString());

输出:

2019-01-01

(5)日期类并不提供国际化,没有时区支持

java8的时间类都支持了时区操作。

例如:LocalDateTime

         //中国时间,输出时不包含时区
         LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
         System.out.println(ldt);
        //意大利罗马时间,输出时包含时区
        ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Europe/Rome"));
        System.out.println(zdt);

输出

2019-12-20T23:17:07.914
2019-12-20T16:17:07.915+01:00[Europe/Rome]

6.2 线程安全问题

(1)Date、Calendar可变性,线程安全问题

java8中所有类都是final修饰的,每次修改都会生成新的副本。

(2)DateFormat和SimpleDateFormat线程安全问题

java8中的DateTimeFormatter也是不可变的,源码:

 

 6.3 java8对日期api进行系统的设计,增加了许多实用方便的操作,几乎不用再使用dateutil额外工具类。

比如,增加一天。

        LocalDate localDate = LocalDate.of(2019, 1, 1);
        LocalDate localDate2 = localDate.plusDays(1);
        System.out.println("localDate:"+localDate);
        System.out.println("localDate2:"+localDate2);

输出:

localDate:2019-01-01
localDate2:2019-01-02

 

 

参考:https://blog.csdn.net/wangsun300/article/details/103403490

おすすめ

転載: www.cnblogs.com/xkzhangsanx/p/12075575.html