2013-03-15 1 views
1

java.sql.Timestamp가 필요하지만 입력 문자열이 LocalDateTime으로 변환되었을 때 LocalDateTime에서 변환하려고하면 "T" 2013-03-15T00 : 00 : 00.000처럼 추가되었습니다. 어떤 아이디어? 아니면 문자열을 타임 스탬프로 변환하는 더 좋은 방법이 있습니까? 나는 시간이 미래에 조작 될 필요가있는 경우에 대비하여 joda를 사용하기를 원했습니다.joda-time-2.2 LocalDateTime을 java.sql.Timestamp로 변환

감사합니다.

+0

는 당신이 ORM 프레임 워크를 사용하고 있습니까? 통상은, 명시 적으로 java.sql 형태로 변환하지 않고, 프레임 워크가 그것을 실시하도록 (듯이)합니다. – Zutty

답변

7

당신은

LocalDateTime ldt = LocalDateTime.now(); 
Timestamp ts = new Timestamp(ldt.toDate().getTime()); 
+1

그래, 그건 내 코드에 관련이없는 버그였다. :(또한'Timestamp ts = new Timestamp (ldt.toDateTime(). getMillis());도 효과적입니다. 하나의 장점은 다른 것입니까? – yellavon

+0

둘 다 같아요. –

+0

두 방법 모두에서 동일한 출력을 생성합니다. – yellavon

1

이 가장 좋은 방법은 자바 8 시간 API를 사용 할 수없는 이유 : JPA와 함께 사용

LocalDateTime ldt = timeStamp.toLocalDateTime(); 
    Timestamp ts = Timestamp.valueOf(dateTime); 

이 모델에 넣어 (https://weblogs.java.net/blog/montanajava/archive/2014/06/17/using-java-8-datetime-classes-jpa) :

@Converter(autoApply = true) 
public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, Timestamp> { 
    @Override 
    public Timestamp convertToDatabaseColumn(LocalDateTime ldt) { 
     return Timestamp.valueOf(ldt); 
    } 

    @Override 
    public LocalDateTime convertToEntityAttribute(Timestamp ts) { 
     return ts.toLocalDateTime(); 
    } 
} 

이제 상대 시간대 독립적 인 시간입니다. 는 또한 그것을 쉽게 할 일이다

LocalDate ld = ldt.toLocalDate(); 
    LocalTime lt = ldt.toLocalTime(); 

포맷 :

DateTimeFormatter DATE_TME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") 
String str = ldt.format(DATE_TME_FORMATTER); 
ldt = LocalDateTime.parse(str, DATE_TME_FORMATTER); 
관련 문제