Java에서 MySQL 날짜 및 타임 스탬프 처리
자바 애플리케이션에서 날짜 시간과 타임 스탬프를 혼합하여 MySQL 데이터베이스로 날짜 정보를 추가하고 입력하는 측면에서 좋은 타협은 무엇입니까?
Java 측에서 날짜는 일반적으로 (잘못 설계되었지만 옆에 있음)로 표시 java.util.Date
됩니다. 기본적으로 타임 스탬프라고도 하는 a 풍미의 Epoch 시간 을 기반으로합니다 long
. 날짜 및 시간 부분에 대한 정보가 모두 포함되어 있습니다. Java에서 정밀도는 밀리 초 단위입니다.
SQL 측면에서, 거기에 몇 가지 표준 날짜와 시간 유형이다 DATE
, TIME
그리고 TIMESTAMP
(일부 DB도라고에 DATETIME
), JDBC의로 표현되는 java.sql.Date
, java.sql.Time
및 java.sql.Timestamp
모든 서브 클래스 의이 java.util.Date
. 정밀도는 종종 Java와 같이 밀리 초 단위로 DB에 따라 다르지만 초 단위 일 수도 있습니다.
반대로에서 java.util.Date
의이 java.sql.Date
날짜 부분 (년, 월, 일)에 대한 정보 만 포함되어 있습니다. (가) Time
시간 부분에 대한 정보 만 (시간, 분, 초)를 포함하고,이 Timestamp
는 두 부분에 대한 정보를 포함로 같은 java.util.Date
않습니다.
타임 스탬프를 DB에 저장하는 일반적인 관행 (즉, java.util.Date
Java 측 및 java.sql.Timestamp
JDBC 측)은 PreparedStatement#setTimestamp()
.
java.util.Date date = getItSomehow();
Timestamp timestamp = new Timestamp(date.getTime());
preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?");
preparedStatement.setTimestamp(1, timestamp);
DB에서 타임 스탬프를 얻는 일반적인 방법은 ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.
MySQL 문서 에는 MySQL 유형을 Java 유형에 매핑하는 방법에 대한 정보가 있습니다. 일반적으로 MySQL 날짜 시간 및 타임 스탬프의 경우 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를 Mysql datetime에 저장하는 방법 ...?
편집하다:
다른 사람들이 지적했듯이 문자열 사용 제안으로 인해 문제가 발생할 수 있습니다.
BalusC는 문제에 대한 좋은 설명을 제공했지만 사용자가 직접 선택하고 테스트 할 수있는 엔드 투 엔드 코드가 부족합니다.
모범 사례는 항상 날짜-시간을 UTC 시간대로 DB에 저장하는 것입니다. SQL 타임 스탬프 유형에 시간대 정보가 없습니다.
날짜 시간 값을 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.Timestamp 유형 그대로 읽으십시오.
- 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
'Program Tip' 카테고리의 다른 글
사용자 지정 AuthorizeAttribute 클래스 내에서 RedirectToAction ()을 사용할 수 있습니까? (0) | 2020.12.15 |
---|---|
객체 배열에서 잘못된 자바 스크립트 배열 길이 (0) | 2020.12.15 |
"관대 한"의 사용은 무엇입니까? (0) | 2020.12.15 |
자바 스크립트에서 객체 프로토 타입에 액세스하는 방법은 무엇입니까? (0) | 2020.12.15 |
Fortran이 과학 컴퓨팅에 사용되는 이유는 무엇입니까? (0) | 2020.12.15 |