Qual è il modo corretto di convertire tra java.sql.Date
e LocalDate
(Java8)?Conversione tra LocalDate e sql.Date
risposta
La versione Java 8 (e successive) di java.sql.Date
ha un supporto incorporato per LocalDate
, tra cui toLocalDate
e valueOf(LocalDate)
.
Per convertire LocalDate
-java.sql.Date
è possibile utilizzare
java.sql.Date.valueOf(localDate);
E convertire da java.sql.Date
a LocalDate
:
sqlDate.toLocalDate();
Fuso orario:
I LocalDate
tipo memorizza senza tempo informazioni sulla zona, mentre java.sql.Date
fa. Pertanto, quando si utilizzano le conversioni di cui sopra, i risultati dipendono dal fuso orario predefinito del sistema (come indicato nei commenti).
Se non si vuole fare affidamento sul fuso orario di default, è possibile utilizzare la seguente conversione:
Date now = new Date();
LocalDate current = now.toInstant()
.atZone(ZoneId.systemDefault()) // Specify the correct timezone
.toLocalDate();
Si noti che questo utilizza il fuso orario predefinito del sistema per interpretare la data, che potrebbe essere o meno ciò che si desidera. Spesso è preferibile specificare il fuso orario esplicitamente! – marc82ch
@ marc82ch A ['LocalDate'] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) esplicitamente non ha un fuso orario. Puoi aggiungere alcuni dettagli su come specificarne uno e in che modo ciò influenzerebbe le cose? – beldaz
@beldaz Potrei sbagliarmi, non conosco davvero le parti interne, ma penso che un java.sql.Date sia rappresentato da un lungo timestamp dall'epoca (UTC). Quindi, quando legge dal campo DB DATE, deve essere interpretato (dal driver) per rappresentarlo come un lungo. Ricorda che java.sql.Date eredita da java.util.Date. Quindi è fondamentalmente un termine Instant in Java 8 e la conversione in un LocalDate richiede un fuso orario. Ma penso che finché il driver JDBC e il tuo codice usano lo stesso fuso orario predefinito, non importa. – marc82ch
- 1. Conversione tra LocalDate e XMLGregorianCalendar
- 2. Java/servlet: get sql.Date attuale
- 3. Spring JDBC + Postgres SQL + Java 8 - conversione da/a LocalDate
- 4. Conversione tra SqlGeometry e DbGeometry
- 5. TimeCategory di Groovy con LocalDate e LocalDateTime
- 6. Come estrarre epoca da LocalDate e LocalDateTime?
- 7. LocalDate - Come rimuovere il carattere "T" in LocalDate
- 8. Marshalling LocalDate con JAXB
- 9. String to LocalDate
- 10. Come convertire Joda Localdate in Joda DateTime?
- 11. Conversione tra spazi colore RGB e RYB
- 12. Conversione tra classe scala e Dinamica
- 13. conversione manuale tra caratteri ASCII e .NET
- 14. Conversione tra SQL char e C#
- 15. Conversione tra cv :: Mat e arma :: mat
- 16. Conversione tra Latin1-encoded Data.ByteString e Data.Text
- 17. Conversione tra std :: tuple e boost :: tuple
- 18. Java 8 - Converti LocalDate in ZonedDateTime
- 19. LocalDate da Week and WeekYear
- 20. Come formattare LocalDate in stringa?
- 21. Disabilita conversione implicita tra typedef
- 22. Conversione tra int [ish] e double [ish] in asm.js
- 23. Conversione tra dimensione carattere WPF e dimensione carattere "standard"
- 24. C#: nessuna conversione implicita tra "espressione lambda" e "espressione lambda"?
- 25. Conversione tra testo e varchar (MAX) in SQL Server
- 26. Conversione tra EnumSet e array di valori booleani
- 27. Conversione SSIS tra errore Unicode e non Unicode
- 28. Conversione del puntatore-puntatore tra classi derivate e di base?
- 29. Conversione di JSON tra stringa e byte [] con GSON
- 30. Conversione tra C++ std :: vector e array C senza copiare
La formulazione sulla questione in sé è un bene anche per quelli/specificamente alla ricerca di conversione da java.sql .Date a java.time.LocalDate, anche se l'altra domanda ha una risposta simile. –