5/7, 5/8, 5/9 날짜와 시간

박세현·2024년 5월 7일
0

JAVA

목록 보기
20/22
post-thumbnail

날짜와 시간

1. Date

  • JDK 1.0
  • java.util 패키지

참고) 자바문서
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Date.html


예시1) Date



예시2) year, month

month : 0~11



예시3) epochTime




2. Calendar

  • JDK 1.1

  • 설계가 빈약

  • 생성자함수 정의 못함
    -> Calendar cal = new Calendar;
    -> Calendar cal = Calendar.getInstance();

  • static Calendar getInstance() : 생성자 함수

  • 서기 달력외에 다른 체계 달력(불기)을 지역화 설정에 따라 객체 생성

  • 문제점

    • 설계(인터페이스x), 체계 부족(상수, 기능 분리x)
    • 날짜, 시간의 불변성x -> 변경시에 원래 객체가 변경(변경 전 데이터는 확인 불가)
    • 메서드명의 모호함, 날짜 수치(월)의 모호함(월 : 0 ~ 11)
      -> 개선 : java.time 패키지

참고) 자바문서
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Calendar.html


예시1)



예시2) year, month, day

month : 0~11



1) int get(날짜 시간 필드) : 날짜, 시간 조회

예시3) int get



2) void set(날짜 시간 필드, 값) : 날짜, 시간 변경

  • 날짜 시간 변경시 원 객체가 변경 : 불변성 유지 X -> 원 객체 값 확인불가
    : java.time 패키지에서 변경: 날짜 시간의 불변성 유지, 변경 할때마다 새로운 객체 반환

예시4) void set



3) add(...) : 날짜 시간의 가감

  • 메서드명이 모호 : java.time 패키지에서 변경 : plus(...), minus(...)

예시)



4) roll(...) : 날짜 시간의 가감

예시)

ㄴ add는 year랑 month 둘다 돔

ㄴ roll은 month만 돌고 돔





java.time 패키지

  • JDK8


1. 설계의 보완

  • 인터페이스
    • Temporal, TemporalAccessor, TemporalAdjuster (하위)

      • LocalDate, LocalTime... (상위)
    • TemporalAmount(하위)

      • Period, Duration(상위)


    • TemporalField(하위) : 날짜, 시간 필드

      • ChronoField(상위)
    • TemporalUnit(하위) : 날짜, 시간 단위

      • ChronoUnit(상위)




2. 날짜/시간의 불변성

  • 날짜, 시간의 변경시 -> 새로운 객체 생성



3. 메서드 명칭에서 오는 모호함을 개선(plus, minus)





java.time : 핵심 클래스

1. Temporal, TemporalAccessor, TemporalAdjuster 인터페이스,

  • 생성자 정의 못하게 되어있음 -> 지역마다 날짜 체계가 달라서 ex) 태국은 불교 달력 씀


1) LocalDate : 날짜

LocalDateTime atTime(시간....) : 날짜 + 시간

  • static LocalDate now() : 지금 현재 날짜
  • static LocalDate of(...) : 직접 지정한 날짜
  • 조회
    • int/long get(TemporalField...)
    • ChronoField
  • 변경
    • with(...) : 날짜 변경 / withYear(...), withMonth(...)
    • plus(...) : 날짜 더하기
    • minus(...) : 날짜 빼기
      -> ✨모두 반환값이 LocalDate : 새로운 객체를 반환 -> 원객체의 불변성 유지⭕

참고)
✨Locale : 지역화

참고) 자바문서 LocalDate
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/LocalDate.html


예시) static LocalDate now()



예시) static LocalDate of(...)



예시) 조회



예시) 상수를 쓰는게 정석이지만 이미 많이쓰는거라 정의가 되어있다?



예시) Locale : 지역화



예시) Locale : TextStyle.FULL, TextStyle.SHORT



예시) 원객체의 불변성 유지⭕ : with(...)

ㄴ 원객체의 불변성 유지⭕
ㄴ 새로운 객체 생성



예시) 원객체의 불변성 유지⭕ : plus(...), minus(...)

ㄴ 원객체의 불변성 유지⭕
ㄴ 새로운 객체 생성



2) LocalTime : 시간

LocalDateTime atTime(LocalDate ...) : 시간 + 날짜

  • static LocalDate now() : 지금 현재 날짜
  • static LocalDate of(...) : 직접 지정한 날짜

참고)
LocalDate와 메서드 정의 거의 비슷


예시) static LocalDate now(), static LocalDate of(...)



3) LocalDateTime : 날짜(LocalDate) + 시간(LocalTime)

ZonedDateTime atZone(ZoneId ...) : 날짜시간 + 시간대
OffsetDateTime atOffset(ZoneOffset ...)

  • static LocalDate now() : 지금 현재 날짜
  • static LocalDate of(...) : 직접 지정한 날짜

예시) LocalDateTime



4) ZonedDateTime : 날짜와 시간(LocalDateTime) + 시간대(ZoneId - Asia/Seoul)

  • 섬머 타임제 고려

예시)



예시)



예시) 현재 영국 시간

ㄴ 오전 8시 22분...



예시) 뉴욕 현지 시간

ㄴ 새벽 3시 24분...



5) OffsetDateTime : 날짜와 시간(LocalDateTime) + 시간대(ZoneOffset - +9)

예시)



6) Instant

  • EpochTime - 1970. 1. 1 자정부터(UTC+0) 1/1000 단위 카운트

참고) Timestamp - 초 단위 카운팅
: Date 클래스로 만들어진 객체 -> 변환(Date클래스에 toInstant())


예시)




2. TemporalAmount 인터페이스

1) Duration

  • between(
  • until(
  • LocalDateTime
    : plusSeconds(...)

  • 시간의 차이 (초, 나노 초)
  • 시간간격(초, 나노 초)

참고) 자바문서_Duration
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Duration.html


예시)



예시) 초



예시)



2) Period

  • between(LocalDate, LocalDate)

  • 날짜의 차이
  • 날짜 사이의 간격(년, 월, 일)

참고) 자바문서_Period
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/Period.html


예시)





java.time.format : 형식화 클래스

1) DateTimeFomatter

  • ofPattern("패턴")
  • 명시한 형식으로 출력

  • format(...) : 자바객체 -> 형식화된 문자열로 변경
  • parse(...) : 형식화된 문자열 -> 자바 객체로 변경

참고) 자바문서_DateTimeFomatter
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/time/format/DateTimeFormatter.html


예시) format



예시) parse





java.time.temporal : 날짜, 시간의 단위, 필드

TemporalField 인터페이스 - 필드

  • ChronoField

TemporalUnit 인터페이스 - 단위

  • ChronoUnit




java.time.zone : 시간대 관련 클래스

ZoneId

ZoneOffset

1. java.time 패키지의 핵심 클래스

1) LocalDate와 LocalTime

  • 특정 필드의 값 가져오기 - get(), getXXX()

    • int get(필드 명);
    • ChronoField : 날짜, 시간 필드
  • 필드의 값 변경하기 - with(), plus(), minus()

    • LocalDate with() : 날짜/시간 변경
    • LocalDate plus() : 날짜/시간 +
    • LocalDate minus() : 날짜/시간 -
  • 날짜와 시간의 비교 - isAfter(), isBefore(), isEqual()

    • compareTo() : 음수 - isBefore()
    • compareTo() : 0 - isEqual()
    • compareTo() : 양수 - isAfter()



2. Period와 Duration




3. 객체 생성하기 - now(), of()

now() : 현재 날짜,시간
of(....)




4. Temporal과 TemporalAmount




5. Instant





파싱과 포맷

java.time.format

1. parse()

형식화 문자열 -> 날짜/시간

  • 핵심 클래스 (LocalDate, LocalTime, LocalDateTime ... )



2. format() : 날짜/시간 -> 형식화 문자열

DateTimeFormatter
DateTimeFormatter state ofPattern("패턴")
.format(TemporalAccessor ...)





형식화 클래스

  • java.text 패키지 : 형식화 관련 편의 클래스 모음


1. DecimalFormat

  • 숫자 -> 형식화된 문자열
  • 10000 -> 10,000

  • format(...) : 숫자 -> 형식화된 문자열
    • 0 패턴
    • # 패턴
  • Number parse(...) : 형식화된 문자열 -> 숫자

참고) 자바문서_DecimalFormat
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/text/DecimalFormat.html



예시) format(...) : 0 패턴, # 패턴


예시) parse




2. SimpleDateFormat

  • 날짜 형식화 : java.util.Date 객체

  • String format(..) : Date객체 -> 형식화된 문자열
  • Date parse(..) : 형식화된 문자열 -> Date 객체


예시) format(..)


예시) parse(..)




3. ChoiceFormat

  • format

참고) 자바문서_ChoiceFormat
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/text/ChoiceFormat.html



예시)




4. MessageFormat

profile
귤귤

0개의 댓글