1. 날짜 시간 API 소개
Java 제작자는 Date 및 Calendar 클래스의 상황을 좋아하지 않았습니다. 그들은 당시에는 좋았지만 시대는 변합니다. 그리고 간단하고 강력하며 신뢰할 수 있는 것이 필요하게 되었습니다. 그리고 Java 8이 출시되면서( Calendar
출시 15년 후) Java Date Time API 가 도입되었습니다. 시간을 다루는 모든 가능한 작업을 해결할 수 있어야 하는 클래스 세트입니다.
클래스가 너무 많아서 여러 패키지로 나뉩니다.
패키지 java.time
는 Java Date Time API의 기본 패키지이며 LocalDate
, LocalTime
, LocalDateTime
, Instant
, Period
및 와 같은 클래스를 포함합니다 Duration
. 이러한 클래스의 모든 객체는 입니다 immutable
. 즉, 생성 후에는 변경할 수 없습니다.
패키지 java.time.format
에는 시간 형식화, 즉 시간(및 날짜)을 문자열로 또는 그 반대로 변환하기 위한 클래스가 포함되어 있습니다. DateTimeFormatter
예를 들어 클래스 를 대체하는 다목적 클래스가 포함되어 있습니다 SimpleDateFormat
.
패키지 java.time.zone
에는 시간대 작업을 위한 클래스가 포함되어 있습니다. TimeZone
및 와 같은 클래스를 포함합니다 ZonedDateTime
. 세계 여러 곳에 위치한 클라이언트를 위한 서버 코드를 작성하는 경우 이러한 클래스가 실제로 필요합니다.
2. LocalDate
클래스
우리가 살펴볼 Date Time API의 첫 번째이자 가장 유용한 클래스는 클래스입니다 LocalDate
. 이름에서 짐작할 수 있듯이 이 클래스는 날짜와 함께 작동하도록 설계되었습니다.
이 클래스의 객체는 생성된 후에 변경되지 않습니다. 즉, 클래스 LocalDate
는 변경할 수 없습니다. 그러나이 속성은 클래스에 단순성과 안정성을 추가합니다. 특히 여러 스레드(실행 스레드)가 이러한 개체와 동시에 상호 작용하는 경우.
새 개체를 만들려면 LocalDate
정적 메서드 중 하나를 사용해야 합니다. 주요 목록은 다음과 같습니다.
현재 날짜 얻기
현재 날짜를 가져오려면 정적 메서드를 사용해야 합니다 now()
. 보기보다 훨씬 쉽습니다.
LocalDate today = LocalDate.now();
여기서 today
는 LocalDate
변수이고 클래스 의 LocalDate.now()
정적 메서드에 대한 호출입니다 .now()
LocalDate
예:
암호 | 콘솔 출력 |
---|---|
|
|
특정 시간대의 날짜 가져오기
이 클래스 에는 특정 시간대의 현재 날짜를 가져올 수 있는 LocalDate
다양한 메서드도 있습니다 .now(ZoneId)
이를 위해서는 클래스 ZoneId
(java.time.ZoneId)라는 또 다른 클래스가 필요합니다. 시간대 이름이 지정된 객체를 of()
반환하는 메서드가 있습니다 .ZoneId
상하이의 현재 날짜를 확인하려면 다음 코드를 작성해야 합니다.
암호 | 콘솔 출력 |
---|---|
|
|
인터넷에서 모든 시간대의 이름 목록을 찾을 수 있습니다.
3. 특정 날짜 받기
특정 날짜를 나타내는 개체를 가져오려면 LocalDate
정적 메서드를 사용해야 합니다 of()
. 여기에 있는 모든 것도 매우 간단하고 명확합니다.
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
여기서 date
는 LocalDate
변수이고 클래스 의 정적 메서드에 대한 호출입니다 .LocalDate.of()
of()
LocalDate
여기에서 2월을 월로 지정하는 데 사용되는 클래스(java.time.Month) FEBRUARY
의 상수를 볼 수 있습니다 .Month
숫자를 사용하여 구식 방식으로 월을 지정할 수도 있습니다.
LocalDate date = LocalDate.of(2019, 2, 22);
둘? 2월 대신? 그것은 달이 다시 한 번부터 번호가 매겨진다는 것을 의미합니까?
예, Java가 생성된 지 거의 20년이 지난 지금 마침내 0부터 시작하여 개월 수를 세는 일이 중단되었습니다.
예:
암호 | 콘솔 출력 |
---|---|
|
|
오늘의 인덱스로 날짜 구하기
날짜를 만드는 또 다른 흥미로운 방법이 있습니다. 이 ofYearDay
방법을 사용하면 연도의 숫자와 해당 연도의 날짜 인덱스만을 기준으로 날짜를 얻을 수 있습니다. 일반적인 모습은 다음과 같습니다.
LocalDate date = LocalDate.ofYearDay(year, day);
year
연도의 숫자는 어디에 있고 day
연도의 날짜 인덱스입니다.
예:
암호 | 콘솔 출력 |
---|---|
|
|
2019년 100일은 4월 10일입니다.
유닉스 날짜 얻기
Date
1970년 1월 1일 이후 개체가 항상 시간을 밀리초로 저장한 것을 기억하십니까 ? 프로그래머가 옛날을 그리워하지 않도록 클래스에는 1970년 1월 1일부터 계산된 날짜를 반환하는 메서드 LocalDate
가 있습니다. ofEpochDay()
일반적인 모습은 다음과 같습니다.
LocalDate date = LocalDate.ofEpochDay(day);
day
1970년 1월 1일 이후 경과된 일수는 어디에 있습니까?
예:
암호 | 콘솔 출력 |
---|---|
|
|
4. 날짜 요소 가져오기
개체를 변경하는 것은 불가능 LocalDate
하지만 저장된 날짜의 개별 요소를 가져올 수 있습니다. LocalDate
개체에는 이를 위한 몇 가지 방법이 있습니다.
방법 | 설명 |
---|---|
|
특정 날짜의 연도를 반환합니다. |
|
날짜의 월 반환: 여러 상수 중 하나JANUARY, FEBRUARY, ...; |
|
날짜의 월 인덱스를 반환합니다. 1월 == 1. |
|
해당 월의 일 인덱스를 반환합니다. |
|
연초부터 일의 인덱스를 반환합니다. |
|
요일 반환: 여러 상수 중 하나MONDAY, TUESDAY, ...; |
|
시대를 반환합니다: BCE (현재 시대 이전) 및 CE (현재 시대) |
예:
암호 | 콘솔 출력 |
---|---|
|
|
LocalDate
5. 개체 의 날짜 변경
클래스 LocalDate
에는 날짜 작업을 수행할 수 있는 여러 메서드가 포함되어 있습니다. 이러한 메서드의 구현은 클래스의 메서드와 유사합니다 String
. 기존 개체를 변경하지 않고 LocalDate
대신 원하는 데이터가 있는 새 개체를 반환합니다.
클래스 의 메서드는 다음과 같습니다 LocalDate
.
방법 | 설명 |
---|---|
|
날짜에 지정된 일수를 더합니다. |
|
날짜에 주를 추가합니다. |
|
날짜에 월을 추가합니다. |
|
날짜에 연도 추가 |
|
날짜에서 일을 뺍니다. |
|
날짜에서 주를 뺍니다. |
|
날짜에서 월을 뺍니다. |
|
날짜에서 연도를 뺍니다. |
예:
암호 | 콘솔 출력 |
---|---|
|
|
우리가 호출하는 메서드는 birthday object
변경되지 않습니다. 대신 해당 메서드는 원하는 데이터가 포함된 새 개체를 반환합니다.
GO TO FULL VERSION