-- 현재 시간 조회(시분초까지)SELECTCURRENT_TIMESTAMP(); -- 2024-05-30 13:41:24SELECT NOW(); -- 2024-05-30 13:41:24-- 현재 시간 조회(밀리 세컨드까지)SELECTCURRENT_TIMESTAMP(3); -- 2024-05-30 13:41:24.048SELECT NOW(3); -- 2024-05-30 13:41:24.048-- 현재 시간 조회(마이크로 세컨드까지)SELECTCURRENT_TIMESTAMP(6); -- 2024-05-30 13:41:24.24.565960SELECT NOW(6); -- 2024-05-30 13:41:24.565960-- 현재 일자 조회 SELECTCURRENT_DATE(); -- 2024-05-30SELECTDATE(NOW()); -- 2024-05-30-- 현재 시간 조회 SELECTCURRENT_TIME(); -- 13:41:24SELECTTIME(NOW()); -- 13:41:24
2. TimeStamp 밀리 세컨드
💡 TimeStamp 밀리세컨드
- 밀리세컨드의 경우 1/1000초를 의미합니다. 그렇기에 1000밀리세컨드는 1초와 동일합니다.
- 일반적으로 TimeStamp 타입을 취하게 되면 연도, 월, 시간(시, 분, 초)에 대한 저장까지 밖에 수행이 되지 않습니다. 그렇기에 TimeStamp의 밀리세컨드까지 반환을 받고 데이터를 넣기 위해서는 데이터 타입에 TIMESTAMP(3)을 추가하거나 조회할때는 CURRENT_TIMESTAMP(3)를 통하여서 밀리세컨드까지의 데이터를 조회합니다.
-- 현재 시간 조회(밀리세컨드까지)SELECTCURRENT_TIMESTAMP(3); -- 2024-05-30 13:41:24.048SELECT NOW(3); -- 2024-05-30 13:41:24.048
3. TimeStamp 마이크로 세컨드
💡 TimeStamp 마이크로 세컨드
- 밀리세컨드의 1/1000로, 1초의 백만분의 1을 나타내는 시간 단위입니다. 이는 빠른 컴퓨터 작업 속도나 고주파 시그널의 주기 등을 측정하는 데 사용됩니다.
- 따라서, TimeStamp의 마이크로세컨드까지 반환을 받고 데이터를 넣기 위해서는 데이터 타입에 TIMESTAMP(6)을 추가하거나 조회할 때는 CURRENT_TIMESTAMP(6)을 통하여 마이크로세컨드까지의 데이터를 조회합니다.
-- 현재 시간 조회(마이크로 세컨드까지)SELECTCURRENT_TIMESTAMP(6); -- 2024-05-30 13:41:24.565960SELECT NOW(6); -- 2024-05-30 13:41:24.565960
💡 [참고] 세컨드를 기준으로 밀리 - 마이크로 - 나노 세컨드의 단위에 대해 알아봅니다.
분류
1초 기준
세컨드(초)
1초
밀리 세컨드
1000
마이크로 세컨드
1,000,000
나노 세컨드
1,000,000,000
4. 사용예시
💡 사용예시
- 날짜 타입과 관련된 TB_DATE 테이블을 생성하고 각각 컬럼을 DATE, TIME, YEAR, TIMESTAMP, TIMESTAMP(3), TIMESTAMP(6) 형태로 DDL을 구성하였습니다.
- Java 프로그래밍 언어에서 데이터베이스와 상호작용하는 데 필요한 클래스와 인터페이스를 제공합니다. 이 패키지는 주로 JDBC API의 일부로 사용됩니다. - java.sql 패키지는 데이터베이스 연결, SQL 문 실행, 결과 집합 접근 등을 위한 여러 클래스와 인터페이스를 제공합니다.
Java 클래스
패키지
설명
Date
java.sql.Date
SQL DATE 값에 매핑되는 클래스입니다. 연, 월, 일 정보를 저장할 수 있습니다.
Time
java.sql.Time
SQL TIME 값에 매핑되는 클래스입니다. 시, 분, 초 정보를 저장할 수 있습니다.
Timestamp
java.sql.Timestamp
SQL TIMESTAMP 값에 매핑되는 클래스입니다. 연, 월, 일, 시, 분, 초, 나노초 정보를 저장할 수 있습니다.
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
publicclassMappingExampleDto{
private Date date;
private Time time;
private Timestamp timestamp;
}
2. 사용예시 -1: 데이터베이스 구조
💡 사용예시 -1: 데이터베이스 구조
- 아래와 같이 데이터 구조로 구성이 되어있고, 데이터를 아래와 같이 넣었습니다.
3. 사용예시 -2 : DTO 구성
💡 사용예시 -2 : DTO 구성
- java.sql 패키지를 기준으로 DTO를 구성하였습니다.
-데이터베이스의 DATE 데이터 타입은 java.sql.Date를 사용하였습니다. - 데이터베이스의 TIME 데이터 타입은 java.sql.time을 사용하였습니다. - 데이터베이스의 TIMESTAMP, TIMESTAM(3), TIMESTAMP(6)는 모두 java.sql.Timestamp를 사용하였습니다.
- 자바 8에 도입된 새로운 날짜와 시간 API입니다. 기존의 java.util.Date와 java.util.Calendar가 가진 문제점을 해결하고, 더욱 직관적이고 사용하기 쉬운 API를 제공하기 위해 도입되었습니다.
- 이 패키지는 불변 객체를 사용하여 thread-safe하며, 직관적인 메소드 이름을 가지고 있어 사용하기 쉽습니다. 또한, ISO-8601 표준을 따르고 있어서 국제적으로 통용되는 날짜와 시간 형식을 사용할 수 있습니다. - 따라서 java.time 패키지는 현대의 복잡한 날짜와 시간 요구사항을 처리하기 위한 강력한 도구입니다.
Java 클래스
분류
패키지
설명
예시 값
LocalTime
시간
java.time.LocalTime
시, 분, 초, 나노초를 저장하는 시간을 표현하는 클래스입니다.
13:45:20
LocalDate
날짜
java.time.LocalDate
연, 월, 일을 저장하는 날짜를 표현하는 클래스입니다.
2022-12-31
LocalDateTime
날짜와 시간
java.time.LocalDateTime
연, 월, 일, 시, 분, 초, 나노초를 저장하는 날짜와 시간을 함께 표현하는 클래스입니다.
시간(시, 분, 초)을 나타내는 데이터 타입입니다. '-HH:MM:SS' 형식을 사용합니다.
YEAR(n)
int
java.time.YEAR
연도를 나타내는 데이터 타입입니다. 4자리 또는 2자리 형식을 사용할 수 있습니다.
DATETIME(n)
java.sql.Timestamp
java.time.LocalDateTime
연도, 월, 일, 시간(시, 분, 초)을 나타내는 데이터 타입입니다. 'YYYY-MM-DD HH:MM:SS' 형식을 사용합니다.
TIMESTAMP(n)
java.sql.Timestamp
java.time.LocalDateTime
연도, 월, 일, 시간(시, 분, 초)을 나타내는 데이터 타입입니다. '1970-01-01 00:00:01' UTC부터 '2038년 1월 19일 03:14:07' UTC까지의 범위를 가집니다.
2. java.sql, java.time 패키지 별 밀리세컨드 / 마이크로세컨드
💡 java.sql, java.time 패키지 별 밀리세컨드 / 마이크로세컨드
- timestamp_type에는 TIMESTAMP 타입으로 세컨드까지의 시간이 들어가 있습니다. - timestamp_milsec_type에는 TIMESTAMP(3) 타입으로 밀리세컨드까지의 시간이 들어가 있습니다. - timestamp_microsec_type에는 TIMESTAM(6) 타입으로 마이크로세컨드까지의 시간이 들어가 있습니다.
3. java.sql 패키지 출력 확인
💡 java.sql 패키지 출력 확인 - 패키지 java.sql인 Timestamp 데이터 타입으로 매핑을 하는 경우 아래와 같이 ‘밀리세컨드’에 대해서만 출력이 되고 이후는 출력이 되지 않고 있습니다.
- java.sql의 경우는 기본적으로 밀리세컨드 단위를 사용합니다.
4. java.time 패키지 출력 확인
💡 java.time 패키지 출력 확인
- 패키지 java.time인 LocalDateTime 데이터 타입으로 매핑을 하는 경우 아래와 같이 ‘밀리세컨드’ 모두 출력이 되는것을 확인할 수 있습니다. - 즉, 밀리세컨드까지의 데이터를 객체와 매핑하고자 할때는 java.time.LocalDateTime을 사용해야합니다. - java.time의 경우는 기본적으로 나노세컨드 단위를 사용합니다.
💡 [참고] 해당 소스코드는 아래의 Repository 내에 DateTypeSqlDto.java, DateTypeTimeDto.java 파일 내에서 확인이 가능합니다.