Java LocalDateTime

2023. 2. 19. 17:19Java

프로젝트 내 src 내 javabasic 패키지 내 DateTypeEx.java

package javabasic;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.Date;

public class DateTypeEx {
	//자바의 LocalDateTime 데이타 타입을 DB 에 insert 할 때 필요
		public static Timestamp localDateTimeToTimeStamp(LocalDateTime ldt) {
			return Timestamp.valueOf(ldt);
		}
		
		//DB 의  Timestamp 데이타 타입을 Java로 select하여 가져올 때 필요
		public static LocalDateTime timeStampToLocalDateTime(Timestamp ts) {
			return ts.toLocalDateTime();
		}
		
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Class.forName("oracle.jdbc.driver.OracleDriver");
		String url = "jdbc:oracle:thin:@localhost:1521:orcl";
		Connection conn = DriverManager.getConnection(url, "scott", "a1234");
		PreparedStatement pst = null;
		System.out.println("DB 접속 완료!!");
		
		String sql = "insert into person values(?,?,?,?)";
		pst = conn.prepareStatement(sql);
		pst.setInt(1, 2);
		pst.setString(2, "김관우");
//		pst.setString(2, "양관우");
		pst.setDouble(3, 90.9);
		
		Date date = new Date();	//java.util.Date객체
//		java.sql.Date birthday = new java.sql.Date(date.getTime());
		
		//Oracle의 date형식과 연동되는 java의 Date는 java.sql.Date 클래스이다.
		//java.util.Date클래스로는 오라클의 Date형식과 연동할 수 없다.
		//java.sql.Date = 년월일, java.sql.Timestamp = 년월일시분초
		//java.sql.Time = 시간(시분초)
		
//		java.sql.Date birthday = new java.sql.Date(date.getTime());
//		//System.out.println(birthday);
//		pst.setDate(4, birthday);
//		pst.executeUpdate();
//		
//		Timestamp birthday_time = new Timestamp(date.getTime());
//		pst.setTimestamp(4, birthday_time);
//		pst.executeUpdate();
		
		Time birthday_time2 = new Time(date.getTime());
//		SimpleDateFormat dateFormat = new SimpleDateFormat("yy/MM/dd kk:mm:ss");
//		String strDate = dateFormat.format(Calendar.getInstance().getTime());
//		System.out.println(strDate);
		
//		Timestamp ts = localDateTimeToTimeStamp(LocalDateTime.now());
//		System.out.println("ts : " + ts);
//		
//		LocalDateTime ldt = timeStampToLocalDateTime(ts);
//		System.out.println("ldt : " + ldt);
		
		LocalDateTime now = LocalDateTime.now();
		Timestamp timestamp = Timestamp.valueOf(now);
//		System.out.println(now);
//		System.out.println(timestamp);
		
//		pst.setTime(4, birthday_time2);
		pst.setTimestamp(4, timestamp);
		pst.executeUpdate();
		
		if(pst != null) pst.close();
		if(conn != null) conn.close();
	}

}

실행 결과

DB 접속 완료!!

java.time.LocalDateTime

LocalDateTime 클래스는 

2007-12-03T10:15:30 와 같이, 

ISO-8601 달력 체계에서 시간-대가 없는 날짜-시간 클래스이다.

여기서 시간대는 영국의 그리니치 천문대를 기준으로 지역에 따른 시간의 차이, 다시 말해 지구의 자전에 따른 지역 사이에 생기는 낮과 밤의 차이를 인위적으로 조정하기 위해 고안된 시간의 구분선을 일컫는다. 그리니치 천문대를 기준으로 세계의 0시가 결정된다.

LocalDateTime 클래스의 객체는 날짜-시간을 나타내는 불변상태인(immutable) 날짜-시간 객체인데, 종종 년-월-일-시간-분-초 로 보여진다.

시간은 나노초(십억분의일초) 정밀도로 표시된다.

 

java.sql.Timestamp

Timestamp 클래스는 JDBC API 가 요 Timestamp 클래스의 객체를 SQL TIMESTAMP 값으로 식별하게끔 허용하는

java.util.Date 클래스를 감싸고 있는 경량(쉽고 간단한) wrapper, 즉 더 단순하거나 그저 다른 API 안에 다른 클래스의 기능을 감싸는 클래스이다. wrapper 의 일반적인 예로는 어떤 다른 서비스 인터페이스 (규격) 주위를 감싸는 시간(가장 좋은 순간을 잡아 동작을 맞추는 일) 정보 나 기록(logging) 기능을 더하는 것이지, 그런 가장 좋은 순간을 잡아 동작을 맞추어 시간 정보를 제공하는 것이나 기록(logging) 기능을 어떤 다른 서비스 인터페이스 (규격) 의 모든 구현 마다 마다 더하는 것이 아니다. wrapper 클래스를 사용해서 좋은점이 있기 때문에 쓴다. 예외 취급: 예를 들어서 A 클래스와 B클래스가 있다고 하고,

A를 메인 클래스라고 하고 A 메인 클래스를 감싸는 다른 클래스를 B클래스라고 하자. 그리고 A 메인 클래스가 만약 어느때라도 발생한다면 예외를 던질 메서드들을 가진다면, 그래서 그렇게 개발자는 예외들을 다루고 그 예외들을 즉시 기록하는 하나의 wrapper 클래스를 생성하게 되었다. 쉬운 사용:개발자는 wrapper 클래스의 객체를 쉽게 초기화할 수 있다. 일반적으로 초기화 단계는 아주 많은 단계를 거쳐서야 비로소 짜맞추어 지는 반면에 wrapper 클래스는 그렇지 않다.

코드 가독성: 다른 프로그래머가 wrapper 클래스를 작성한 코드를 열어보면, 그 코드는 매우 분명하고 유지보수하기 쉽게 보일 것 이다. 왜냐하면 A 메인 클래스를 감싸는 B 클래스를 보면, A 메인 클래스가 원래 너무 복잡하고 내용도 방대하기 때문에 그 중에서 쓰고 싶지 않으면서 기존 기능을 고도화 시키고 싶을 때 어떤 기능은 추가하고 어떤 기능은 빼고 싶을 때 모든 기존의 A 메인 클래스의 길고 복잡한 코드 중에서 빼버리거나 뽑아서 써서 B 클래스는 포장을 한 것처럼 안의 복잡한 코드 내용물들이 보이지 않게 된다. 즉, 세부적인 것들을 숨긴다. 만약에 개발자가 다른 프로그래머들이 사용하게 될 클래스 한개를 생성하게 된다면, 그러면 개발자는 "오류 운용, 예외 취급, 기록 메세지들과 그 밖의 것들 등등..." 처럼 세부적인 내용들을 감쌀 수 있다. 그렇게 감쌀 수 있다는 것은 곧 그러한 세부적인 기능들을 사용할 필요가 없기 때문에 감싸서 숨겨놓는 다는 것이다. 그렇게 해서 그 클래스를 사용하게될 프로그래머들은 복잡한 혼돈 상태의 알아보기 어려운 코드를 다루어야만 하지는 않게 될것이고, 그저 단순히 써야하는 메서드들만을 사용할 것이다.


 

'Java' 카테고리의 다른 글

Java setDriverClassName(String driverClassName)  (0) 2023.02.20
Java getTime(int columnIndex)  (0) 2023.02.20
Java BasicDataSource  (0) 2023.02.18
Java setAutoCommit(boolean autoCommit)  (0) 2023.02.17
Java CallableStatement  (0) 2023.02.17