java.time.chrono.AbstractChronology는 Java 8 이후의 날짜 및 시간 API(java.time 패키지)에서 사용되는 추상 클래스 중 하나입니다. 이 클래스는 시간 체계를 나타내는 방법을 제공하며, LocalDate, LocalTime, LocalDateTime, ZonedDateTime 및 기타 클래스와 같은 시간 관련 클래스에서 사용됩니다.
AbstractChronology 클래스는 Chronology 인터페이스를 구현합니다. 이 인터페이스는 시간 체계를 나타내는 메서드를 정의합니다. 이 클래스의 하위 클래스는 다양한 태국, 일본, 한국, ISO 등의 시간 체계를 구현합니다.
AbstractChronology 클래스의 구현체는 다음과 같은 메서드를 구현해야합니다.
- LocalDate, LocalTime, LocalDateTime, ZonedDateTime 및 Instant 객체를 생성하는 메서드를 구현합니다.
- 날짜, 시간, 시간대 및 초를 반환하는 메서드를 구현합니다.
- 두 날짜 간의 차이를 반환하는 메서드를 구현합니다.
- 시간 체계의 기본값을 반환하는 메서드를 구현합니다.
AbstractChronology 클래스는 다음과 같은 중요한 메서드를 제공합니다.
1. date(Era era, int yearOfEra, int month, int dayOfMonth) : 지정된 연대, 연도, 월, 일로 LocalDate를 만듭니다.
2. date(int prolepticYear, int month, int dayOfMonth) : proleptic year(연대전 기준 연도)를 기준으로 지정된 연도, 월, 일로 LocalDate를 만듭니다.
3. dateYearDay(Era era, int yearOfEra, int dayOfYear) : 지정된 연대, 연도, 연중 일수로 LocalDate를 만듭니다.
4. dateYearDay(int prolepticYear, int dayOfYear) : proleptic year를 기준으로 지정된 연도, 연중 일수로 LocalDate를 만듭니다.
5. epochDay(long epochDay) : epochDay로 LocalDate를 만듭니다.
6. eraOf(int eraValue) : 지정된 era value로 Era 객체를 만듭니다.
7. eras() : 이 Chronology의 Era 목록을 반환합니다.
8. range(ChronoField field) : 지정된 ChronoField(예: YEAR, MONTH 등)의 값 범위를 반환합니다.
9. resolveDate(Map<TemporalField, Long> fieldValues, ResolverStyle resolverStyle) : Chronology에 대한 지정된 필드 값으로 LocalDate를 만듭니다.
10. resolveEra(Map<TemporalField, Long> fieldValues, ResolverStyle resolverStyle) : Chronology에 대한 지정된 필드 값으로 Era를 반환합니다.
이외에도 다양한 메서드가 있지만, 이는 AbstractChronology 클래스의 하위 클래스에 따라 다릅니다.
이 클래스는 시간 체계를 나타내는 데 사용되는 중요한 추상 클래스 중 하나이며, 다양한 날짜 및 시간 클래스에서 사용됩니다. 예를 들어, LocalDate는 ISO-8601 달력 시스템을 기반으로 하며, JapaneseDate는 일본 달력 시스템을 기반으로 합니다. 이 클래스의 하위 클래스를 사용하면 기존의 시간 체계 이외에도 사용자 정의 시간 체계를 만들 수 있습니다.
또한, 이 클래스의 하위 클래스 중 하나인 HijrahChronology는 히지라(hijrah) 캘린더 시스템을 구현합니다. 이 시스템은 이슬람 달력 시스템으로, 이슬람 국가에서 사용됩니다. 따라서 이 클래스를 사용하여 히지라 달력 시스템을 구현할 수 있습니다.
추가로, AbstractChronology 클래스는 다양한 시간 관련 클래스에서 사용되므로, 이를 사용하는 것은 좋은 프로그래밍 방식입니다. 예를 들어, LocalDate 클래스에서 Chronology 객체를 인자로 전달하여 지정된 Chronology를 사용하여 날짜를 생성할 수 있습니다.
Chronology hijrahChronology = HijrahChronology.INSTANCE;
LocalDate localDate = LocalDate.now(hijrahChronology);
이와 같이 AbstractChronology 클래스를 사용하여 사용자 정의 시간 체계를 만들거나 기존의 시간 체계를 사용하는 등의 작업을 할 수 있습니다.
AbstractChronology 클래스는 추상 클래스이므로 직접 사용할 수는 없지만, 이 클래스를 상속한 하위 클래스를 사용하여 기존 시간 체계를 사용하거나 사용자 정의 시간 체계를 만들 수 있습니다.
이하 예제 코드는 AbstractChronology의 하위 클래스 중 하나인 JapaneseChronology를 사용하는 코드입니다.
// JapaneseChronology를 사용하여 날짜를 생성하는 예제 코드
Chronology japaneseChronology = JapaneseChronology.INSTANCE;
// 현재 날짜를 가져옴
LocalDate now = LocalDate.now(japaneseChronology);
System.out.println("현재 일본 시간: " + now);
// 특정 일자를 만듭니다
LocalDate birthday = LocalDate.of(1990, 4, 1);
System.out.println("생일: " + birthday);
// 일자 간 차이 구하기
long daysBetween = ChronoUnit.DAYS.between(birthday, now);
System.out.println("생일로부터 " + daysBetween + "일이 지났습니다.");
위 코드에서는 JapaneseChronology 객체를 생성하여 LocalDate.now() 메서드에 전달하여 현재 일본 시간을 얻습니다.
그리고 LocalDate 클래스의 of() 메서드를 사용하여 특정 일자를 만들고, ChronoUnit.DAYS.between() 메서드를 사용하여 일자 간의 차이를 구합니다.
위 코드는 JapaneseChronology를 예로 든 것이며, 다른 하위 클래스에서도 마찬가지로 사용할 수 있습니다.
또한, 이 클래스를 사용하여 사용자 정의 시간 체계를 만들 수도 있습니다.
'PT선생님의 코딩 강좌' 카테고리의 다른 글
[PT선생님][15]자바 javax.swing.colorchooser.AbstractColorChooserPanel 알아보기 (0) | 2023.02.18 |
---|---|
[PT선생님][14]자바 java.util.AbstractCollection 알아보기 (0) | 2023.02.18 |
[PT선생님][12]자바 javax.swing.AbstractCellEditor 알아보기 (0) | 2023.02.17 |
[PT선생님][11]자바 javax.swing.border.AbstractBorder 알아보기 (0) | 2023.02.17 |
[PT선생님][10]자바 javax.lang.model.util.AbstractAnnotationValueVisitor9 알아보기 (1) | 2023.02.17 |