ホームページ  >  記事  >  Java  >  Java 8 の新機能である日付 API の詳細な例

Java 8 の新機能である日付 API の詳細な例

黄舟
黄舟オリジナル
2017-07-22 15:50:011487ブラウズ

Java 8 には、java.time パッケージの下に新しい時刻と日付 API のセットが含まれています。以下では、例を使用して、Java 8 の新機能日付 API に関する関連知識を説明します。興味のある友人は、一緒に見てみるとよいでしょう

Java 8 には、java.time パッケージの下に新しい時刻と日付 API のセットが含まれています。次の例は、この新しい API セットの最も重要な部分の一部を示しています。

1.Clock Clock クラスは、現在の日付と時刻にアクセスするためのメソッドを提供します。 Clock はタイムゾーンに依存するため、System の代わりに使用できます。 currentTimeMillis() を使用して現在のマイクロ秒数を取得します。特定の時点は、古い java.util.Date オブジェクトの作成にも使用できる Instant クラスを使用して表すこともできます。

Clock clock = Clock.systemDefaultZone();
long millis = clock.millis();
Instant instant = clock.instant();
Date legacyDate = Date.from(instant);  // legacy java.util.Date


2. タイムゾーン タイムゾーン

新しい API では、タイムゾーンは ZoneId で表されます。タイムゾーンは、 の静的メソッドを使用して簡単に取得できます。 タイム ゾーンは UTS 時間との時差を定義し、インスタント時刻オブジェクトとローカル日付オブジェクトの間で変換する際に非常に重要です。

System.out.println(ZoneId.getAvailableZoneIds());
// prints all available timezone ids
ZoneId zone1 = ZoneId.of("Europe/Berlin");
ZoneId zone2 = ZoneId.of("Brazil/East");
System.out.println(zone1.getRules());
System.out.println(zone2.getRules());
// ZoneRules[currentStandardOffset=+01:00]
// ZoneRules[currentStandardOffset=-03:00]


3.LocalTime 現地時間

LocalTime は、午後 10 時や 17:30:15 など、タイムゾーン情報のない時間を定義します。次の例では、前のコードで作成したタイムゾーンを使用して 2 つの現地時間を作成します。次に、時間が比較され、2 つの時間の時差が時間と分で計算されます。

LocalTime now1 = LocalTime.now(zone1);
LocalTime now2 = LocalTime.now(zone2);
System.out.println(now1.isBefore(now2)); // false
long hoursBetween = ChronoUnit.HOURS.between(now1, now2);
long minutesBetween = ChronoUnit.MINUTES.between(now1, now2);
System.out.println(hoursBetween);    // -3
System.out.println(minutesBetween);   // -239

LocalTime は、時間文字列の解析など、オブジェクトの作成を簡素化するさまざまなファクトリ メソッドを提供します。


LocalTime localTime= LocalTime.of(23, 59, 59);
System.out.println(localTime);    // 23:59:59
DateTimeFormatter germanFormatter =
  DateTimeFormatter
    .ofLocalizedTime(FormatStyle.SHORT)
    .withLocale(Locale.GERMAN);
LocalTime leetTime = localTime.format(germanFormatter);
System.out.println(leetTime);


4.LocalDate ローカル日付

LocalDate は、2014-03-11 などの正確な日付を表します。オブジェクトの値は不変で、その使用方法は基本的に LocalTime と同じです。次の例は、Date オブジェクトに日/月/年を加算および減算する方法を示しています。また、これらのオブジェクトは不変であり、操作は常に新しいインスタンスを返すことにも注意してください。

LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS);
LocalDate yesterday = tomorrow.minusDays(2);
LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4);
DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();
System.out.println(dayOfWeek);  // FRIDAY

文字列から LocalDate 型を解析することは、LocalTime を解析するのと同じくらい簡単です:


DateTimeFormatter germanFormatter =
  DateTimeFormatter
    .ofLocalizedDate(FormatStyle.MEDIUM)
    .withLocale(Locale.GERMAN);
LocalDate xmas = LocalDate.parse("24.12.2014", germanFormatter);
System.out.println(xmas);  // 2014-12-24


5.LocalDateTime ローカルの日付と時刻

LocalDateTime は時刻と日付の両方を表します。最初の 2 つのセクション コンテンツは 1 つのオブジェクトにマージされます。 LocalDateTime は、LocalTime や LocalDate と同様に不変です。 LocalDateTime は、特定のフィールドにアクセスするためのメソッドをいくつか提供します。

LocalDateTime sylvester = LocalDateTime.of(2014, Month.DECEMBER, 31, 23, 59, 59);
DayOfWeek dayOfWeek = sylvester.getDayOfWeek();
System.out.println(dayOfWeek);   // WEDNESDAY
Month month = sylvester.getMonth();
System.out.println(month);     // DECEMBER
long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY);
System.out.println(minuteOfDay);  // 1439

タイムゾーン情報が追加されていれば、ポイントインタイムのインスタントオブジェクトに変換できます。インスタントポイントインタイムオブジェクトは、昔ながらのjava.utilに簡単に変換できます。 。日付。


Instant instant = sylvester
    .atZone(ZoneId.systemDefault())
    .toInstant();
Date legacyDate = Date.from(instant);
System.out.println(legacyDate);   // Wed Dec 31 23:59:59 CET 2014

LocalDateTime のフォーマットは、時刻と日付のフォーマットと同じです。定義済みのフォーマットを使用することに加えて、独自にフォーマットを定義することもできます。


DateTimeFormatter formatter =
  DateTimeFormatter
    .ofPattern("MMM dd, yyyy - HH:mm");
LocalDateTime parsed = LocalDateTime.parse("Nov 03, 2014 - 07:13", formatter);
String string = formatter.format(parsed);
System.out.println(string);   // Nov 03, 2014 - 07:13

java.text.NumberFormat との違いは、新しい点です。 DateTimeFormatter は不変であるため、スレッドセーフです。

以上がJava 8 の新機能である日付 API の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。