java.sql.Timestamp와 함께 Joda-Time을 사용하는 방법
내가 가지고 준비된 문을
INSERT INTO mst(time) VALUES (?);
여기서 time은 PostgreSQL 데이터베이스 에서 Timestamp 유형 입니다. Joda-Time DateTime 개체를 삽입 하거나 시도하고 있다고 말해야합니다. DateTime 객체를 java.sql.Timestamp 로 변환하는 방법을 찾을 수 없습니다 . Joda-Time 문서를 읽었으며 이에 대한 언급이 없습니다.
감사.
먼저 Joda DateTime을 long (epoch 이후 밀리 초)로 변환 한 다음 그로부터 타임 스탬프를 만들 수 있습니다.
DateTime dateTime = new DateTime();
Timestamp timeStamp = new Timestamp(dateTime.getMillis());
JodaTime의 DateTime 생성자가 이제이를 처리 할 수 있습니다. (질문이 게시되었을 때 그것이 사실인지 확실하지 않지만 Google 최고의 결과이므로 새로운 솔루션을 추가 할 것이라고 생각했습니다.)
몇 가지 API 옵션이 있습니다.
public DateTime(Object instant);
public DateTime(Object instant, DateTimeZone zone);
두 옵션 모두 java.util.Date를 확장하므로 java.sql.Timestamp를 허용하지만 DateTime 및 Date는 밀리 초 해상도 * 만 갖기 때문에 Nanoseconds는 무시됩니다 (floored). 특정 시간대가 없으면 DateTimeZone.UTC로 기본 설정됩니다.
<교리 모드>
"해상도"는 제공되는 자릿수입니다. "정밀도"는 표현이 얼마나 정확한지입니다. 예를 들어 MSSQL의 DateTime은 밀리 초 해상도를 갖지만 초 정밀도의 1/3 만입니다 (DateTime2는 가변 해상도와 더 높은 정밀도를 가짐).
</ 교훈 모드>
밀리 초 단위의 UTC 타임 스탬프 예제 :
new DateTime(resultSet.getTimestamp(1));
데이터베이스에서 TIMESTAMP WITH TIME ZONE을 사용하는 경우 시간대를 지원하지 않기 때문에 java.sql.Timestamp를 사용할 수 없습니다. ResultSet # getString을 사용하고 문자열을 구문 분석해야합니다.
두 번째 해상도의 시간대가없는 타임 스탬프 예 ** :
LocalDateTime dt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
.parseLocalDateTime(resultSet.getString(1));
두 번째 해상도의 UTC 타임 스탬프 예 ** :
DateTime dt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
.parseDateTime(resultSet.getString(1));
두 번째 해상도 예제가있는 시간대 (오프셋 형식)가있는 타임 스탬프 ** :
DateTime dt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss Z")
.parseDateTime(resultSet.getString(1));
보너스 : DateTimeFormat # forPattern은 패턴별로 파서를 정적으로 캐시하므로 그럴 필요가 없습니다.
<교리 모드>
일반적으로 DBO 모델에서 문자열을 사용하여 해상도를 명시 적으로 만들고 중간 개체 생성을 방지하는 것이 좋습니다. (2013-11-14 09:55:25가 2013-11-14 09 : 55 : 25.000과 같습니까?) 저는 일반적으로 데이터 보존 문제에 최적화 된 "데이터베이스 모델 개체"와 최적화에 대해 "비즈니스 모델 개체"를 구분하려고합니다. 중간에 변환 / 매핑 레이어가있는 서비스 수준 사용. CRUD 기반 DAO가 비즈니스 객체를 직접 생성하는 것은 우선 순위를 혼합하고 둘 다 최적화하지 않는 경향이 있으며, 누락 된 엣지 케이스로 인해 예기치 않은 장소에서 예외가 발생합니다. 명시 적 변환 계층이 있으면 데이터 소스를 제어하지 않는 경우와 같이 필요한 경우 유효성 검사를 추가 할 수도 있습니다.
</ 교훈 모드>
* 비즈니스 모델에서 나노초 해상도로 해결해야하는 경우 다른 라이브러리를 사용해야합니다.
** 타임 스탬프 문자열 형식은 데이터베이스마다 다를 수 있지만 확실하지 않습니다.
참고 URL : https://stackoverflow.com/questions/1071800/how-to-use-joda-time-with-java-sql-timestamp
'IT박스' 카테고리의 다른 글
웹 사이트에서 C #으로 파일을 다운로드하는 방법 (0) | 2020.11.29 |
---|---|
React 컴포넌트를 조건부로 래핑하는 방법은 무엇입니까? (0) | 2020.11.28 |
SQL Server에서 varchar를 datetime으로 변환 (0) | 2020.11.28 |
IPv4, IPv6 주소를 문자열로 저장하기위한 크기 (0) | 2020.11.28 |
DOM 속성 변경시 이벤트 발생 (0) | 2020.11.28 |