logo

자바 날짜 및 시간

java.time, java.util, java.sql 및 java.text 패키지에는 날짜와 시간을 나타내는 클래스가 포함되어 있습니다. 다음 클래스는 Java에서 날짜를 처리하는 데 중요합니다.

자바 8 날짜/시간 API

Java는 Java 8부터 새로운 날짜 및 시간 API를 도입했습니다. java.time 패키지에는 Java 8 날짜 및 시간 클래스가 포함되어 있습니다.

기존 날짜/시간 API

그러나 기존 또는 기존 Java Date API도 유용합니다. 기존 날짜 및 시간 클래스 목록을 살펴보겠습니다.

날짜 및 시간 형식 지정

다음 클래스를 사용하여 Java에서 날짜와 시간의 형식을 지정할 수 있습니다.

Java 날짜 및 시간 API

Java는 java.time 및 java.util 두 패키지의 도움으로 날짜 및 시간 기능을 제공합니다. Java 8에는 java.time 패키지가 도입되었으며 새로 도입된 클래스는 기존 java.util.Date 및 java.util.Calendar 클래스의 단점을 극복하려고 시도합니다.

기존 날짜 시간 API 클래스

Java 8 릴리스 이전의 기본 클래스는 다음과 같습니다.

굵은 글씨용 CSS

Java.lang.시스템: 이 클래스는 현재 시간을 밀리초 단위로 반환하는 currentTimeMillis() 메서드를 제공합니다. 1970년 1월 1일부터 현재 날짜와 시간을 밀리초 단위로 표시합니다.

java.util.날짜: 특정 시간 순간을 밀리초 단위로 표시하는 데 사용됩니다.

java.util.캘린더: 인스턴스 간 변환과 달력 필드를 다양한 방식으로 조작하기 위한 메서드를 제공하는 추상 클래스입니다.

java.text.SimpleDate형식: 미리 정의된 방식이나 사용자 정의 패턴으로 날짜의 형식을 지정하고 구문 분석하는 데 사용되는 클래스입니다.

java.util.TimeZone: 시간대 오프셋을 나타내며 일광 절약 시간제도 계산합니다.

기존 날짜/시간 API의 단점

    스레드 안전성:Date 및 Calendar와 같은 기존 클래스는 스레드 안전성을 제공하지 않습니다. 따라서 개발자가 처리해야 하는 디버그 동시성 문제가 발생합니다. Java 8의 새로운 날짜 및 시간 API는 스레드 안전성을 제공하고 변경할 수 없으므로 개발자의 동시성 문제를 방지합니다.잘못된 API 설계:클래식 날짜 및 달력 API는 기본적인 일상 기능을 수행하는 방법을 제공하지 않습니다. Java 8에 도입된 날짜 및 시간 클래스는 ISO 중심이며 날짜, 시간, 기간 및 기간과 관련된 작업을 수행하기 위한 다양한 방법을 제공합니다.어려운 시간대 처리:전통적인 Date 및 Calendar 클래스를 사용하여 시간대를 처리하는 것은 개발자가 이에 대한 논리를 작성해야 했기 때문에 어렵습니다. 새로운 API를 사용하면 Local 및 ZonedDate/Time API를 통해 시간대 처리를 쉽게 수행할 수 있습니다.

Java 8의 새로운 날짜 시간 API

새로운 날짜 API는 위에서 언급한 레거시 클래스의 단점을 극복하는 데 도움이 됩니다. 여기에는 다음 클래스가 포함됩니다.

java.time.LocalDate: ISO 달력의 연월일을 나타내며 시간 없이 날짜를 나타내는 데 유용합니다. 생년월일, 결혼일 등 날짜 정보만 표현하는 데 사용할 수 있습니다.

java.time.LocalTime: 시간에만 거래됩니다. 영화 상영 시간이나 지역 도서관의 개관 및 폐관 시간과 같이 인간 기반의 시간을 나타내는 데 유용합니다.

java.time.LocalDateTime: 시간대 없이 날짜와 시간을 모두 처리합니다. LocalDate와 LocalTime의 조합입니다.

java.time.ZonedDateTime: LocalDateTime 클래스를 ZoneId 클래스에 제공된 구역 정보와 결합합니다. 이는 시간대 정보와 함께 완전한 날짜 타임스탬프를 나타냅니다.

java.time.OffsetTime: 시간대 ID 없이 그리니치/UTC에서 해당 시간대 오프셋을 사용하여 시간을 처리합니다.

java.time.OffsetDateTime: 시간대 ID 없이 그리니치/UTC에서 해당 시간대 오프셋을 사용하여 날짜 및 시간을 처리합니다.

java.time.Clock : 특정 시간대의 현재 순간, 날짜 및 시간에 대한 액세스를 제공합니다. Clock 클래스 사용은 선택 사항이지만 이 기능을 사용하면 다른 시간대에 대해 또는 시간이 변경되지 않는 고정 시계를 사용하여 코드를 테스트할 수 있습니다.

java.time.Instant : 이는 타임라인(EPOCH 이후)에서 나노초의 시작을 나타내며 기계 시간을 나타내는 타임스탬프를 생성하는 데 유용합니다. 에포크 이전에 발생하는 순간은 음수 값을 갖고, 에포크 이후에 발생하는 순간은 양수 값을 갖습니다.

java.time.Duration : 두 순간의 차이는 초 또는 나노초 단위로 측정되며 연도, 월, 일과 같은 날짜 기반 구성을 사용하지 않지만 클래스는 일, 시간, 분으로 변환하는 메서드를 제공합니다.

java.time.Period : 날짜 기반 값(년, 월, 일)에서 날짜 간의 차이를 정의하는 데 사용됩니다.

java.time.ZoneId : 이는 시간대 식별자를 명시하고 Instant와 LocalDateTime 간의 변환 규칙을 제공합니다.

java.time.ZoneOffset : 그리니치/UTC 시간과의 시간대 오프셋을 설명합니다.

java.time.format.DateTimeFormatter : 미리 정의된 다양한 포맷터가 제공되거나 우리가 직접 정의할 수도 있습니다. 날짜 시간 값을 구문 분석하고 형식을 지정하는 구문 분석() 또는 형식() 메서드가 있습니다.