본문 바로가기
Programming/Java

[자바/Java] Time 패키지의 클래스

by 코딩하는 랄로 2023. 10. 11.
728x90

저번 글에서는 Data클래스에 대해서 알아보았다.

 

https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-Date-%ED%81%B4%EB%9E%98%EC%8A%A4

 

[자바/Java] Date 클래스

Date 클래스 자바에서는 날짜와 시간을 다룰 수 있는 여러 메소드를 제공하는 Date 클래스가 있다. java.util.Date를 import 하여 해당 객체의 메소드를 사용할 수 있다. JDK 1.8(Java 8) 부터는 java.time.* 패키

codingralro.tistory.com

 

하지만 저번 글에서도 언급하였듯이 Date 클래스는 현재 대부분의 메소드가 사용을 권장하지 않고(deprecated) 있다.(공식문서를 보면...)

 

 

Time 패키지(java.time.*)

그렇기 때문에 Java SE 8부터 제공되는 java.time 패키지에는 Date 클래스를 대체하고도 남는 날짜와 시간을 다루는데 필수 클래스들이 포함되어 있다.

 

필수 클래스 이외에도 다양한 기능을 제공하는 하위 패키지 또한 포함하고 있다.

  • java.time.chrono : ISO-8601에 정의된 표준 달력 이외의 달력 시스템을 사용할 때 필요한 클래스
  • java.time.format : 날짜와 시간에 대한 데이터를 구문분석하고 형식화하는 데 사용되는 클래스
  • java.time.temporal : 날짜와 시간에 대한 데이터를 연산하는 데 사용되는 보조 클래스
  • java.time.zone : 타임 존(time-zone)과 관련된 클래스

java.time 패키지는 Date, Celender 클래스의 단점들 또한 보완하였기 때문에 자바를 다루는 개발자라면 알아두면 유용하게 사용할 수 있을 것이다.

 

또한, 해당 패키지에 포함되는 클래스의 인스턴스는 immutalbe하기 때문에 멀티쓰레드 환경에서 안전하다는 장점 또한 가지고 있다.

 

결정적으로, 스프링, 웹어플리케이션 등 제작에서 java.time을 사용하는 것이 훨씬 수월해진다.

 

 

 

구성 클래스

  • LocalDate : 날짜를 다룸
  • LocalTime : 시간을 다룸
  • LocalDateTime : 날짜와 시간을 한 번에 다룸
  • ZonedDateTime : 특정 타임 존(time-zone)에 해당하는 날짜와 시간을 다룸
  • Instant : 기존의 Date 클래스와 비슷한 용도, 특정 시점의 날짜와 시간을 나노초(nanosecond) 단위로 표현하는 타임스탬프(time-stamp)를 다루는 데 사용
  • Period : 두 날짜 사이의 차이를 표현하는 데 사용
  • Duration : 두 시각 사이의 차이를 표현하는 데 사용

 

 

LocalDate & LocalTime 간단한 예제 코드

String[] arrDate = {
    "현재날짜: " + LocalDate.now(),   // now() 현재 날짜
    "주어진날짜: " + LocalDate.of(1999, 4, 20), // of(year, month, dayOfMonth) 주어진 날짜

    "현재시간: " + LocalTime.now(),	// 14:40:24.089415900
    "주어진시간: " + LocalTime.of(23, 12, 22, 1234567),  // 주어진 시간

    "현재날짜시간: " + LocalDateTime.now(),  // 2023-09-21T14:43:15.685732500
    "주어진날짜시간: " + LocalDateTime.of(2023, 9, 21, 14, 44, 23, 123456789),

    "\nDateTimeFormatter 사용",
    // java.time.DateTimeFormatter 를 사용하여 원하는 포맷으로 출력
    // LocalDateTime => String
    datetime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
    datetime1.format(DateTimeFormatter.ofPattern("yyyy년MM월dd일 HH시mm분ss초")),
    datetime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd a hh:mm:ss")),
				
    // String -> LocalDate
    "\nLocalDate.parse() 사용",
    "" + LocalDate.parse(myDate, DateTimeFormatter.ofPattern("yyyy-MM-dd")) ,

};
for(var d : arrDate) System.out.println(d);

 

 

추가적으로 각 클래스가 가지고 있는 메소드들에 대해서 알고 싶다면 아래의 블로그를 참고하기 바란다.

https://gbsb.tistory.com/302

 

java.time 패키지의 클래스 (LocalDate, LocalTime, etc)

목차 자바에서의 날짜 및 시간 처리 java.time 패키지 LocalDate 클래스 LocalTime 클래스 LocalDateTime 클래스 ZonedDateTime 클래스 Instant 클래스 Period 클래스 Duration 클래스 자바에서의 날짜 및 시간 처리 JDK 1

gbsb.tistory.com

 

 

Java.sql.Timestamp

해당 클래스의 객체는 1970.01.01 00:00:00  GMT 기준 현재까지의 경과 시간을 ms (정수)로 계산해 담은 객체이다. 자바에서 시간, 날짜 객체를 다룰 때에는 java.time.* <-> String <-> Timestamp 간의 데이터 변환 작업이 빈번히 발생하기 때문에 관련 변환 메소드들을 잘 활용할 필요가 있다.

 

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;

public static void main(String[] args) {
   System.out.println("java.sql.Timestamp");
   Timestamp t = new Timestamp(System.currentTimeMillis());

   String now = "2009-03-20 10:20:30.0";

   String[] arr = {
      "Timestamp(0): " + new Timestamp(0L),  //1970.01.01 00:00:00  GMT 기준 --> 한국 KST 1970-01-01 09:00:00.0
      "현재ms: " + System.currentTimeMillis(), //1970.01.01 00:00:00  이후 경과된 시간 (ms)
      "Timestamp(ms): " + new Timestamp(System.currentTimeMillis()),

      //----------------------------------------------
      // 문자열 -> Timestamp
      //     방법1 : 정해진 형식 +  Timestamp.valueOf()
      "\nString -> Timestamp",
      "Timestamp(" + now + ")",
      "" + Timestamp.valueOf(now),

      //----------------------------------------------
      // Timestamp -> 문자열
      // SimpleDateFormat + Timestamp:getTime()
      new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(t.getTime()),

      // Timestamp -> LocalDateTime
      "" + t.toLocalDateTime(),

      // LocalDateTime -> Timestamp
      "" + Timestamp.valueOf(LocalDateTime.now())

   };
   for(var d : arr) System.out.println(d);
       
       
}

 

728x90