programing

Java에서의 MySQL 데이터 시간 및 타임스탬프 처리

randomtip 2022. 11. 22. 21:37
반응형

Java에서의 MySQL 데이터 시간 및 타임스탬프 처리

Java 어플리케이션에서 날짜 시간과 타임스탬프를 혼합하여 MySQL 데이터베이스와 날짜 정보를 외부로 내보내고 입력하는 데 있어 어떤 타협이 좋을까요?

Java 측에서는 일반적으로 날짜는 (설계가 불충분하지만 제외)로 표시됩니다.기본적으로 Epoch time을 기반으로 합니다.long타임스탬프라고도 합니다.여기에는 날짜 및 시간 부품에 대한 정보가 모두 포함되어 있습니다.Java에서는 정밀도는 밀리초 단위입니다.

SQL 측에는 몇 가지 표준 날짜와 시간 유형이 있습니다.DATE,TIME그리고.TIMESTAMP(일부 DB에서는DATETIMEJDBC에서는 의 모든 서브클래스로 표시됩니다.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을 저장하는 방법...

http://www.velocityreviews.com/forums/t599436-the-best-practice-to-deal-with-datetime-in-mysql-using-jdbc.html

편집:

다른 사용자가 지적한 바와 같이 문자열을 사용하는 것이 문제로 이어질 수 있습니다.

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로 값을 다시 읽을 때

  1. java.sql에 있는 그대로 읽습니다.타임스탬프 타입
  2. LocalDateTime 클래스의 atZone 메서드를 사용하여 DateTime 값을 UTC 시간대로 꾸밉니다.
  3. 그런 다음 원하는 시간대로 변경합니다.여기 토론토 타임존으로 변경합니다.

    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

반응형