tl; dr
myPreparedStatetment.setObject(
… ,
LocalDateTime.parse(
"2012-04-13 04:08:42.794".replace(" " , "T")
)
)
dettagli
Il Answer by SJuan76 è corretta: Stai per essere ingannati dall'uscita mal progettato del Metodo Date::toString
. Utilizzare invece le classi java.time.
java.time
L'approccio moderno utilizza il java.time classi che soppiantarono le classi data-ora vecchi problematici, come Date
/Calendar
.
Prima convertire la stringa di input in modo che sia conforme allo standard ISO 8601. Sostituisci lo SPAZIO nel mezzo con uno T
.
String input = "2012-04-13 04:08:42.794".replace(" " , "T") ;
Parse come LocalDateTime
dal vostro input manca un indicatore di offset da-UTC o il fuso orario.
LocalDateTime ldt = LocalDateTime.parse(input) ;
ldt.toString(): 2012-04-13T04: 08: 42.794
SQL
evitare il data-ora legate java.sql
classi. Anche loro sono soppiantati dalle classi java.time. A partire da JDBC 4.2, è possibile scambiare direttamente gli oggetti java.time con il proprio database. Così puoi dimenticare tutto sulla classe java.sql.Date
e il suo terribile design hackerato.
myPreparedStatement.setObject(… , ldt) ;
E ...
LocalDateTime ldt = myResultSet.getObject(… , LocalDateTime.class) ;
morale
Morale della favola # 1: utilizzare oggetti intelligenti, stringhe non muti.
Morale della favola # 2: Usare solo java.time oggetti. Evita le classi di data e ora legacy.
Chi java.time
Il quadro java.time è costruito in Java 8 e versioni successive. Queste classi soppiantano le fastidiose classi di data legacy come java.util.Date
, Calendar
, & SimpleDateFormat
.
Il progetto Joda-Time, ora in maintenance mode, consiglia la migrazione alle classi java.time.
Per ulteriori informazioni, vedere Oracle Tutorial. E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310.
Utilizzando un JDBC driver compatibile con JDBC 4.2 o poi, si può scambiare java.time oggetti direttamente con il database. Nessuna necessità di stringhe o classi java.sql. *.
Dove ottenere le classi java.time?
- Java SE 8, Java SE 9, e più tardi
- incorporato.
- Parte dell'API Java standard con un'implementazione in bundle.
- Java 9 aggiunge alcune funzionalità e correzioni minori.
- Java SE 6 e Java SE 7
- Molte delle funzionalità java.time è di back-porting per Java 6 .
- Android
- versioni successive di implementazioni fascio Android delle classi java.time.
- Per Android precedente, il progetto ThreeTenABP si adatta a ThreeTen-Backport (menzionato sopra). Vedi How to use ThreeTenABP….
Il progetto ThreeTen-Extra java.time prolunga con classi aggiuntive. Questo progetto è un terreno di prova per possibili aggiunte future a java.time. È possibile trovare alcune classi utili come Interval
, YearWeek
, YearQuarter
e more.
FYI, le fastidiose classi di data e ora come ['java.util.Date'] (https://docs.oracle.com/javase/9/docs/api/java/util/Date.html) , ['java.util.Calendar'] (https://docs.oracle.com/javase/9/docs/api/java/util/Calendar.html) e' java.text.SimpleDateFormat' sono ora [legacy ] (https://en.wikipedia.org/wiki/Legacy_system), soppiantato dal [* java.time *] (https://docs.oracle.com/javase/9/docs/api/java/time/ package-summary.html) classi integrate in Java 8 e Java 9. Vedere [* Tutorial * di Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –