Java에서의 MySQL 데이터 시간 및 타임스탬프 처리
Java 어플리케이션에서 날짜 시간과 타임스탬프를 혼합하여 MySQL 데이터베이스와 날짜 정보를 외부로 내보내고 입력하는 데 있어 어떤 타협이 좋을까요?
Java 측에서는 일반적으로 날짜는 (설계가 불충분하지만 제외)로 표시됩니다.기본적으로 Epoch time을 기반으로 합니다.long
타임스탬프라고도 합니다.여기에는 날짜 및 시간 부품에 대한 정보가 모두 포함되어 있습니다.Java에서는 정밀도는 밀리초 단위입니다.
SQL 측에는 몇 가지 표준 날짜와 시간 유형이 있습니다.DATE
,TIME
그리고.TIMESTAMP
(일부 DB에서는DATETIME
JDBC에서는 의 모든 서브클래스로 표시됩니다.java.util.Date
정밀도는 Java와 같이 종종 밀리초 단위로 DB에 의존하지만 몇 초 단위로도 가능합니다.
반대로java.util.Date
,그java.sql.Date
에는 날짜 부분(년, 월, 일)에 대한 정보만 기재되어 있습니다.그Time
시간 부분(시간, 분, 초) 및 에 대한 정보만 포함되어 있습니다.Timestamp
두 부분에 대한 정보를 포함합니다.java.util.Date
한다.
타임스탬프를 DB에 저장하는 일반적인 방법(따라서,java.util.Date
자바 측과java.sql.Timestamp
를 사용합니다.
java.util.Date date = getItSomehow();
Timestamp timestamp = new Timestamp(date.getTime());
preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?");
preparedStatement.setTimestamp(1, timestamp);
DB에서 타임스탬프를 취득하는 일반적인 방법은 를 사용하는 것입니다.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.
MySQL 문서에는 MySQL 유형을 Java 유형에 매핑하는 방법에 대한 정보가 나와 있습니다.일반적으로 MySQL datetime 및 타임스탬프에는java.sql.Timestamp
. 다음과 같은 리소스가 있습니다.
http://dev.mysql.com/doc/refman/5.1/en/datetime.html
http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion
Java Date to Mysql datetime을 저장하는 방법...
편집:
다른 사용자가 지적한 바와 같이 문자열을 사용하는 것이 문제로 이어질 수 있습니다.
BalusC는 이 문제에 대해 잘 설명했지만 사용자가 직접 선택하고 테스트할 수 있는 엔드 투 엔드 코드가 부족합니다.
가장 좋은 방법은 항상 날짜 시간을 UTC 표준 시간대로 DB에 저장하는 것입니다. SQL 타임스탬프 유형에는 표준 시간대 정보가 없습니다.
datetime 값을 sql db에 쓸 때
//Convert the time into UTC and build Timestamp object.
Timestamp ts = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC")));
//use setTimestamp on preparedstatement
preparedStatement.setTimestamp(1, ts);
DB에서 Java로 값을 다시 읽을 때
- java.sql에 있는 그대로 읽습니다.타임스탬프 타입
- LocalDateTime 클래스의 atZone 메서드를 사용하여 DateTime 값을 UTC 시간대로 꾸밉니다.
그런 다음 원하는 시간대로 변경합니다.여기 토론토 타임존으로 변경합니다.
ResultSet resultSet = preparedStatement.executeQuery(); resultSet.next(); Timestamp timestamp = resultSet.getTimestamp(1); ZonedDateTime timeInUTC = timestamp.toLocalDateTime().atZone(ZoneId.of("UTC")); LocalDateTime timeInToronto = LocalDateTime.ofInstant(timeInUTC.toInstant(), ZoneId.of("America/Toronto"));
언급URL : https://stackoverflow.com/questions/3323618/handling-mysql-datetimes-and-timestamps-in-java
'programing' 카테고리의 다른 글
스크롤 후 요소가 표시되는지 확인하는 방법 (0) | 2022.11.22 |
---|---|
JavaScript에서 페이지가 새로고침 또는 새로고침되는지 확인합니다. (0) | 2022.11.22 |
MySQL의 테이블 필드에 인덱스가 있는지 확인하는 방법 (0) | 2022.11.22 |
JavaScript 변수 존재 여부 확인(정의/초기화) (0) | 2022.11.22 |
자바스크립트의 월과 날짜를 2자리 형식으로 가져오려면 어떻게 해야 하나요? (0) | 2022.11.21 |