날짜와 시간

최주영·2024년 5월 22일
0

자바

목록 보기
29/30

✅ 날짜 라이브러리 역사

java.util.Date : JDK 1.0

java.util.Calendar : JDK 1.1

Joda-Time : 외부라이브러리로 자바 표준에 포함되지 않아서, 프로젝트에 별도로 추가해야함

java.time 패키지 : JDK 1.8(자바8)에서 위 Joda-Time 을 기반으로 표준 API로 도입


✅ java.time 패키지

  • LocalDate : 날짜만 표현할 때 사용
    ex) 2024-05-21
LocalDate nowDate = LocalDate.now(); // 현재날짜 객체 생성 LocalDate.now()
LocalDate ofDate = LocalDate.of(2024,5,24); // 지정날짜 객체 생성 LocalDate.of()

ofDate = ofDate.plusDays(10); // 날짜 연산 plusDays()
  • LocalTime : 시간만 표현할 때 사용
    ex) 08:20:30.213
LocalTime nowTime = LocalTime.now(); // 현재시간 객체 생성 LocalTime.now()
LocalTime ofTime = LocalTime.of(9,10,30); // 지정시간 객체 생성 LocalTime.of()

LocalTime ofTimePlus = ofTime.plusSeconds(30); // 시간연산
  • LocalDateTime : 날짜와 시간을 둘 다 표현할 때 사용
    ex) 2024-05-21T08:20:30.213
LocalDateTime nowDt = LocalDateTime.now(); // 현재날짜시간 객체 생성
LocalDateTime ofDt = LocalDateTime.of(2024,5,22,11,6,23); // 지정날짜시간 객체 생성

// LocalDateTime 객체에는 LocalDate와 LocalTime 클래스가 들어있어서 날짜와 시간 분리가 가능하다
LocalDate ld = ofDt.toLocalDate(); // 날짜만 분리하는 메소드로 반환형은 LocalDate 타입이여야함
LocalTime lt = ofDt.toLocalTime(); // 시간만 분리하는 메소드로 반환형은 LocalTime 타입이여야함

// of() 메소드로 다시 합체가능
LocalDateTime ldt = LocalDateTime.of(ld,lt);

// 연산도가능
// 비교 
boolean flag = nowDt.isBefore(ofDt); // 현재날짜시간보다 지정날짜시간이 더 이전인지 판단
boolean flag1 = nowDt.isAfter(ofDt); // 현재날짜시간보다 지정날짜시간이 더 이후인지 판단
boolean flag2 = nowDt.isEqual(ofDt); // 현재날짜시간과 지정날짜시간이 같은지 판단

Local 이 붙은이유는 세계 시간대를 고려하지 않고, 특정 지역의 날짜와 시간만을 고려할 때 사용
-> 주로 국내서비스만 개발할 때 사용

  • ZonedDateTime : 시간대를 고려한 날짜와 시간을 표현할 때 사용하며, 시간대 표현하는 타임존 포함
    ex) 2024-05-21T08:20:30.213+9:00[Asia/Seoul]
  • OffsetDateTime : 위와 동일하지만, 여기에는 타임존이 없음
    EX) 2024-05-21T08:20:30.213+9:00

  • Year Month YearMonth MonthDay : 년, 월, 년월, 달일을 각각 다룰 때 사용
  • DayOfWeek : 월화수목금토일을 나타내는 클래스

  • Instant : 1970년 1월 1일 0시 0분 0초(UTC)를 기준으로 경과한 시간으로 계산함
    -> 내부에는 초 데이터만 들어있으며, 날짜와 시간을 나노초 정밀도로 표현

  • Period : 두 날짜 사이의 간격을 년,월,일 단위로 나타냄
  • Duration : 두 시간 사이의 간격을 시,분,초 단위로 나타냄

✅ 날짜와 시간 문자열 파싱과 포맷팅

  • 포맷팅 : 날짜와 시간 데이터를 원하는 포맷의 문자열로 변경하는 것 (Date -> String)
// 포맷팅: 날짜를 문자로
	LocalDate date = LocalDate.of(2024,12,31);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 DD일"); 
    String formattedDate =  date.format(formatter); 

	LocalDateTime now = LocalDateTime.of(2024,12,31,13,30,59);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    String formattedDateTime = now.format(formatter);


// 파싱: 문자를 날짜로
	String input = "2030년 01월 01일";
    LocalDate parsedDate = LocalDate.parse(input, formatter);
    
    String dateTimeString = "2030-01-01 11:30:00";
    LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);
  • 파싱 : 문자열을 날짜와 시간 데이터로 변경하는 것 (String -> Date)
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글