250x250
250x250
JinSeopKim
Hello World!
JinSeopKim
전체 방문자
오늘
어제
  • 분류 전체보기 (168)
    • Artificial intelligence (14)
      • DeepDiveToAI (3)
      • Pytorch (3)
      • Etc (8)
    • Back-end (19)
      • Spring (10)
      • JPA (9)
    • Language (24)
      • Python (3)
      • Java (11)
      • Swift (10)
    • Math (4)
      • Linear Algebra (4)
    • CodingTest (79)
      • Algolithm (12)
      • Backjoon (25)
      • Programmers (42)
    • Etc (27)
      • Book Review (3)
      • Adsp (6)
      • Life (2)
      • Docker (1)
      • odds and ends (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • 머신러닝
  • BOJ
  • 프로그래머스
  • 자바
  • certificate
  • SpringMVC
  • 파이썬
  • 코딩테스트
  • uArm
  • 브루트포스
  • Python
  • 카카오
  • swift
  • AI
  • java
  • BFS
  • ADsP
  • 개발
  • JAVA8
  • Front-end
  • 백준
  • DP
  • ios
  • 구현
  • 개발자
  • 선형대수
  • data
  • 문제풀이
  • JPA
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JinSeopKim

Hello World!

Java8의 시간 API 알아보기(LocalDateTime, Instant 등)
Language/Java

Java8의 시간 API 알아보기(LocalDateTime, Instant 등)

2022. 3. 1. 22:40
728x90
728x90

Date/Time API

과거 API의 문제점

시간 API로는 Date와 GregorianCalendar가 있다.

  • 이름이 이상하다. 분명 Date인데, 시간을 가져올 수 있다.
  • Date의 시간을 출력해보면 long타입의 숫자가 나온다.(이는 자바의 epoch로1970년 1월 1일 00시 기준으로 현재까지의 초를 의미한다. -> 먼가 성능을 측정할 때 쓰일 것 같은 기계적인 시간이다.)
  • mutable하다. 시간에 값을 넣어 변경시킬 수 있다.(서비스에 장애를 일으키는 굉장히 큰 원인)

오늘날의 API

오늘날의 API는 값을 변경할 수 없으며 만약 변경을 하려고 하면 새로운 객체를 반환해주는 방법으로 변경이 이루어진다. 즉 Immutable하다.

LocalDateTime

  • 사람들이 주로 사용하는 시간을 의미한다.
    LocalDateTime now = LocalDateTime.now(); //현재 동작중인 서버의 시간
  • now()를 사용하면 현재의 시간을 반환해준다
    LocalDateTime myBirthDay = LocalDateTime.of(1997, Month.MARCH, 24, 0, 0, 0, 0);
  • of()를 사용하여 특정 시간에 대한 정보를 표현해줄 수 있다.
LocalDateTime time = LocalDateTime.now();
DateTimeFormatter format = DateTimeFormatter.ofPattern("MM/dd/yyyy");
String formatTime = time.format(format);
  • DateTimeFormatter를 활용해 format을 만들면 특정 format에 맞추어 String으로 반환해줄 수 있다.
  • 이때 DateTimeFormatter의 ofPattern을 사용하면 String으로 입력한 패턴을 얻을 수 있다.
  • format()에 매개변수로 위에서 만들어준 패턴을 넣어주면 LocalDateTime이 String으로 반환된다.
LocalDate parse = LocalDate.parse("06/30/2022", format);
  • 포맷으로 들어오는 정보를 파싱을 받을 수도 있다.
  • 위에서 만든 포맷이 MM/dd/yyyy이므로 year에 2022, MM에 06, dd에 30이 들어간 LocalDate가 반환된다.

ZonedDateTime

  • 특정 지역의 시간을 표현하는데 사용
  • ZoneId를 활용해 특정 지역의 Id를 가져와서 적용할 수 있다.
    ZonedDateTime nowInSeoul = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
  • 특정 지역의 id를 가져오는데 ZoneId의 of()를 사용하며 가져올 수 있다.
  • 그 값의 현재 시간값은 now()로 뽑을 수 있다.

Period

  • DateTime의 두 시간의 차이를 계산해주는 것이다.

          LocalDate today = LocalDate.now();
          LocalDate anotherDay = LocalDate.of(2022, 02, 19);
          Period period = Period.between(today, thisYearBirthday);
          System.out.println(period.getDays()); // 두개의 시간의 차이(Day로 반환)
    
         Period until = today.until(thisYearBirthday);
         until.get(ChronoUnit.DAYS)
  • Period의 between()을 활용하여 두개의 시간의 차이를 반환해준다.

  • until()도 between()과 동일한 역할을 수행한다. (between을 쓸때와 동일한 역할을 수행한다.

  • get()으로 시간을 가져올 때 ChronoUnit을 활용하여 원하는 타입으로 가져올 수 있다.

Instant

  • 성능 측정을 위한 시간을 가져온다.
Instant instant = Instant.now(); // 기준시 UTC, GMT
  • now()로 시간을 가져오면 UTC, GMT를 가져온다.
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = instant.atZone(zone); 
  • atZone()을 활용하여 특정 지역의 시간대를 가져올 수 있다.

Duration

 Instant start = instant.now();
 Instant plus = start.plus(10, ChronoUnit.SECONDS);
 Duration between = Duration.between(start, plus); // 10
  • Instant에 대한 시간의 비교의 차이를 구할 때 사용한다.

레거시 API와의 연동

Date date = new Date();
Instant dateToInstant = date.toInstant();
Date InstantToDate = Date.from(dateToInstant);
  • 이전 API인 Date를 Instant로 변경이 가능하다.
  • Instant도 Date로 변경이 가능하다.
728x90
728x90
저작자표시 비영리 (새창열림)

'Language > Java' 카테고리의 다른 글

자바 Excuter로 쓰레드 처리하기  (0) 2022.03.03
자바 쓰레드의 기초  (0) 2022.03.03
Optional을 알아보자!  (0) 2022.02.27
Java8의 Stream을 알아보자!  (0) 2022.02.22
인터페이스의 default와 static 메소드 java8  (0) 2022.02.20
    'Language/Java' 카테고리의 다른 글
    • 자바 Excuter로 쓰레드 처리하기
    • 자바 쓰레드의 기초
    • Optional을 알아보자!
    • Java8의 Stream을 알아보자!
    JinSeopKim
    JinSeopKim
    기록📚

    티스토리툴바