>  기사  >  Java  >  Java 8의 새로운 기능인 날짜 API의 자세한 예

Java 8의 새로운 기능인 날짜 API의 자세한 예

黄舟
黄舟원래의
2017-07-22 15:50:011434검색

Java 8에는 java.time 패키지 아래에 새로운 시간 및 날짜 API 세트가 포함되어 있습니다. 다음은 Java 8의 새로운 기능 날짜 API에 대한 관련 지식을 설명하기 위해 예제를 사용합니다. 관심 있는 친구들은 함께 살펴보세요

Java 8에는 java.time 패키지 아래에 새로운 시간 및 날짜 API 세트가 포함되어 있습니다. 다음 예는 이 새로운 API 세트의 가장 중요한 부분 중 일부를 보여줍니다.

1.Clock Clock 클래스는 현재 날짜 및 시간에 액세스하는 방법을 제공하며 시간대를 구분하며 시스템을 대체하는 데 사용할 수 있습니다. currentTimeMillis()를 사용하여 현재 마이크로초 수를 가져옵니다. 특정 시점은 Instant 클래스를 사용하여 나타낼 수도 있으며, 이는 이전 java.util.Date 객체를 생성하는 데에도 사용할 수 있습니다.

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와 같이 시간대 정보가 없는 시간을 정의합니다. 다음 예제에서는 이전 코드에서 생성된 시간대를 사용하여 두 개의 현지 시간을 생성합니다. 그런 다음 시간을 비교하고 두 시간 사이의 시간 차이를 시간과 분 단위로 계산합니다.

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은 시간과 날짜를 모두 나타냅니다. 처음 두 섹션 내용이 하나의 개체로 병합됩니다. LocalTime 및 LocalDate와 마찬가지로 LocalDateTime은 변경할 수 없습니다. 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

타임존 정보만 추가하면 시점 Instant 객체로 변환 가능합니다. Instant 시점 객체는 구식 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.