2016-07-25 35 views
0

我試圖轉換一個字符串值(最初是一個LocalDateTime變量)存儲在數據庫(作爲日期時間),並將其解析成LocalDateTime變量。從數據庫(類型datetime)解析字符串變量到LocalDateTime變量使用Resultset

String dTP; 
dTP=(rs.getString("arrivedate")); 
      DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; 
      LocalDateTime dateTimeParked = LocalDateTime.parse(dTP,formatter); 

而且沒有格式化:我已經有格式試過

String dTP; 
dTP=(rs.getString("arrivedate")); 
LocalDateTime dateTimeParked = LocalDateTime.parse(dTP); 

但每次我得到同樣的錯誤:

Exception in thread "AWT-EventQueue-0" java.time.format.DateTimeParseException: Text '2016-07-09 01:30:00.0' could not be parsed at index 10 

我的想法是,指數10是日期和時間之間的空間。

任何人都可以幫助我嗎?我一直盯着它幾個小時:(

回答

1
。 。

有在的格式,導致這一問題的錯誤,請參閱https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html.The ISO日期時間格式「2011-12-03T10:15:30」,下面將爲你的想法

public static void main(String[] args) throws Exception { 


    String isoDate = "2016-07-09T01:30:00.0"; 
    // ISO Local Date and Time '2011-12-03T10:15:30' 
    DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; 
    LocalDateTime dateTimeParked = LocalDateTime.parse(isoDate, formatter); 
    System.out.println(dateTimeParked); 




    String date = "2016-07-09 01:30:00.0"; 
    DateTimeFormatter formatterNew = DateTimeFormatter.ofPattern("yyyy-LL-dd HH:mm:ss.S"); 
    LocalDateTime dateTimeParkedNew = LocalDateTime.parse(date, formatterNew);  
    System.out.println(dateTimeParkedNew); 

} 

此打印S: 2016-07-09T01:30 2016-07-09T01:30

+0

非常感謝你們!它現在效果很好。 @Ramachandran G A –

0

試試這個格式:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"); 

我不知道的毫秒部分,雖然(如果它超過1個字符長)

+0

這線程應進一步協助您:http://stackoverflow.com/questions/1459656/how-to-get-the-current-time-in-yyyy-mm-dd-hhmisec-millisecond-format -in-java –

1

其他的答案是正確的,你的字符串是從ISO 8601格式的規範版本通過使用空格字符的不同SQL格式中間而不是T。因此,請用T替換空間或定義用於解析的格式化模式。

不要使用日期時間值的字符串從數據庫

但更大的問題是,你從檢索數據庫作爲一個字符串的日期時間值。您應該在Java中檢索日期時間類型的數據作爲日期時間類型。

對於符合JDBC 4.2及更高版本的驅動程序,您應該可以使用帶有java.time對象的setObjectgetObject

對於SQL類型TIMESTAMP WITHOUT TIME ZONE使用LocalDateTime。對於TIMESTAMP WITH TIME ZONE,根據數據庫使用InstantZonedDateTime

LocalDateTime ldt = myResultSet.getObject(1);