2013-03-15 108 views
1

我需要一個java.sql.Timestamp,但是當我嘗試從LocalDateTime轉換時,它失敗,因爲當輸入字符串轉換爲LocalDateTime時,字母「T」被添加,如2013-03-15T00:00:00.000。有任何想法嗎?還是有更好的方法將字符串轉換爲時間戳?我只是想在未來需要操縱時間的情況下使用喬達。joda-time-2.2將LocalDateTime轉換爲java.sql.Timestamp

謝謝。

+0

您是否使用了ORM框架?通常你不會顯式地轉換爲'java.sql'類型,但讓框架爲你做。 – Zutty 2013-03-15 13:11:48

回答

7

你爲什麼不能做

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

是的,這是一個無關的錯誤在我的代碼。 :(也''時間戳ts =新時間戳(ldt.toDateTime()。getMillis());'工作以及任何一個優勢的另一個? – yellavon 2013-03-15 13:37:51

+0

我認爲兩者相同 – 2013-03-15 14:55:13

+0

我驗證兩種方式產生相同的輸出中間狀態('.toDate()'或'to.DateTime()')只是不同的格式 – yellavon 2013-03-16 18:46:40

1

的最佳方式使用Java 8時API:

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

對於JPA使用把與你的模型(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); 
相關問題