저번 글에서는 Data클래스에 대해서 알아보았다.
https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-Date-%ED%81%B4%EB%9E%98%EC%8A%A4
하지만 저번 글에서도 언급하였듯이 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);
추가적으로 각 클래스가 가지고 있는 메소드들에 대해서 알고 싶다면 아래의 블로그를 참고하기 바란다.
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);
}
'Programming > Java' 카테고리의 다른 글
[자바/Java] 제네릭(Generic) (0) | 2023.10.12 |
---|---|
[자바/Java] Wrapper 클래스 (0) | 2023.10.12 |
[자바/Java] Date 클래스 (1) | 2023.10.10 |
[자바/Java] 문자열3 - 정규표현식 (1) | 2023.10.09 |
[자바/Java] 문자열2 - StringBuilder, StringTokenizer (1) | 2023.10.08 |