-- 현재 시간 조회(시분초까지)
SELECT CURRENT_TIMESTAMP(); -- 2024-05-30 13:41:24
SELECT NOW(); -- 2024-05-30 13:41:24
-- 현재 시간 조회(밀리 세컨드까지)
SELECT CURRENT_TIMESTAMP(3); -- 2024-05-30 13:41:24.048
SELECT NOW(3); -- 2024-05-30 13:41:24.048
-- 현재 시간 조회(마이크로 세컨드까지)
SELECT CURRENT_TIMESTAMP(6); -- 2024-05-30 13:41:24.24.565960
SELECT NOW(6); -- 2024-05-30 13:41:24.565960
-- 현재 일자 조회
SELECT CURRENT_DATE(); -- 2024-05-30
SELECT DATE(NOW()); -- 2024-05-30
-- 현재 시간 조회
SELECT CURRENT_TIME(); -- 13:41:24
SELECT TIME(NOW()); -- 13:41:24
2. TimeStamp 밀리 세컨드
💡 TimeStamp 밀리세컨드
- 밀리세컨드의 경우 1/1000초를 의미합니다. 그렇기에 1000밀리세컨드는 1초와 동일합니다.
- 일반적으로 TimeStamp 타입을 취하게 되면 연도, 월, 시간(시, 분, 초)에 대한 저장까지 밖에 수행이 되지 않습니다. 그렇기에 TimeStamp의 밀리세컨드까지 반환을 받고 데이터를 넣기 위해서는 데이터 타입에 TIMESTAMP(3)을 추가하거나 조회할때는 CURRENT_TIMESTAMP(3)를 통하여서 밀리세컨드까지의 데이터를 조회합니다.
-- 현재 시간 조회(밀리세컨드까지)
SELECT CURRENT_TIMESTAMP(3); -- 2024-05-30 13:41:24.048
SELECT NOW(3); -- 2024-05-30 13:41:24.048
3. TimeStamp 마이크로 세컨드
💡 TimeStamp 마이크로 세컨드
- 밀리세컨드의 1/1000로, 1초의 백만분의 1을 나타내는 시간 단위입니다. 이는 빠른 컴퓨터 작업 속도나 고주파 시그널의 주기 등을 측정하는 데 사용됩니다.
- 따라서, TimeStamp의 마이크로세컨드까지 반환을 받고 데이터를 넣기 위해서는 데이터 타입에 TIMESTAMP(6)을 추가하거나 조회할 때는 CURRENT_TIMESTAMP(6)을 통하여 마이크로세컨드까지의 데이터를 조회합니다.
-- 현재 시간 조회(마이크로 세컨드까지)
SELECT CURRENT_TIMESTAMP(6); -- 2024-05-30 13:41:24.565960
SELECT 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을 구성하였습니다.
CREATE TABLE TB_DATE(
date_sq int unsigned NOT NULL AUTO_INCREMENT COMMENT '날짜 시퀀스',
date_type DATE NOT NULL COMMENT '날짜 타입',
time_type TIME NOT NULL COMMENT '시간 타입',
year_type YEAR NOT NULL COMMENT '연도 타입',
timestamp_type TIMESTAMP NOT NULL COMMENT '타임스탬프 타입',
timestamp_milsec_type TIMESTAMP(3) NOT NULL COMMENT '밀리세컨드 타임스탬프 타입',
timestamp_microsec_type TIMESTAMP(6) NOT NULL COMMENT '나노세컨드 타임스탬프 타입',
PRIMARY KEY(date_sq)
);
- 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;
public class MappingExampleDto {
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를 사용하였습니다.
💡 데이터베이스 타입과 java.sql 패키지의 객체 필드 데이터 타입 매핑
데이터베이스 타입
객체 필드
변수명
DATE
java.sql.Date
dateType
TIME
java.sql.Time
timeType
YEAR
int
yearType
TIMESTAMP
java.sql.Timestamp
timestampType
TIMESTAMP(3)
java.sql.Timestamp
timestampMilsecType
TIMESTAMP(6)
java.sql.Timestamp
timestampMicrosecType
package com.adjh.springboot3tierform.model.dto;
import lombok.*;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
/**
* Please explain the class!!
*
* @author : lee
* @fileName : DateInfoDto
* @since : 24. 6. 3.
*/
@Getter
@ToString
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DateInfoDto {
// 날짜 시퀀스
private int dateSq;
// 날짜 타입
private Date dateType;
// 시간 타입
private Time timeType;
// 연도 타입
private int yearType;
// 타임스템프 타입
private Timestamp timestampType;
// 타임스탬프 타입(밀리세컨드)
private Timestamp timestampMilsecType;
// 타임스탬프 타입(마이크로세컨드)
private Timestamp timestampMicrosecType;
@Builder
public DateInfoDto(int dateSq, Date dateType, Time timeType, int yearType, Timestamp timestampType, Timestamp timestampMilsecType, Timestamp timestampMicrosecType) {
this.dateSq = dateSq;
this.dateType = dateType;
this.timeType = timeType;
this.yearType = yearType;
this.timestampType = timestampType;
this.timestampMilsecType = timestampMilsecType;
this.timestampMicrosecType = timestampMicrosecType;
}
}
4. 사용예시 -3 : 수행 결과
💡 사용예시 -3 : 수행 결과 - 아래와 같이 데이터베이스 데이터 타입과 매핑이 되어 Java 객체의 필드가 출력이 되었습니다.
- 자바 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 파일 내에서 확인이 가능합니다.