Zastosowanie java.sql tylko do przeniesienia bazy
Rodzaje java.sql, takiego jako java.sql.Timestamp
, powinny być używane tylko do transferu zi do bazy danych. Natychmiast konwertuj na typy java.time w Java 8 i nowszych.
java.time.Instant
A java.sql.Timestamp
mapy do java.time.Instant
, moment na osi czasu w UTC.
java.sql.Timestamp ts = myResultSet.getTimestamp(…);
Instant instant = ts.toInstant();
Strefa czasowa
Zastosuj pożądany/Oczekiwany strefę czasową, aby uzyskać ZonedDateTime
.
ZoneId zoneId = ZoneId.of("America/Montreal");
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId);
sformatowana Struny
użyć DateTimeFormatter
wygenerować ciąg. Kody wzorów są podobne do tych z java.text.SimpleDateFormat
, ale nie dokładnie, więc przeczytaj uważnie dokument.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu.MM.dd.HH.mm.ss");
String output = zdt.format(formatter);
Ten konkretny format jest niejednoznaczna co do jego dokładnego znaczenia, gdyż brak jest jakiegokolwiek wskazania offset-from-UTC lub strefy czasowej.
ISO 8601
Jeśli masz nic do powiedzenia w tej sprawie, proponuję rozważyć użycie standardowych formatów ISO 8601 zamiast toczenia własne. Standardowy format jest dość podobny do twojego. Na przykład:
2016-02-20T03:26:32+05:30
.
Klasy java.time domyślnie używają tych standardowych formatów, więc nie trzeba określać wzorca. Klasa ZonedDateTime
rozszerza standardowy format, dołączając nazwę strefy czasowej (mądrą poprawkę).
String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]
Konwersja do java.sql
można przekonwertować z java.time powrotem do java.sql.Timestamp
. Wyodrębnij Instant
z ZonedDateTime
.
Nowe metody zostały dodane do starych klas, aby ułatwić konwersję do/z klas java.time.
java.sql.Timestamp ts = java.sql.Timestamp.from(zdt.toInstant());
Nawet lepiej w Java 8: http: //docs.oracle.com/javase/tutorial/datetime/ – nimsson