java.time
Старые библиотеки хлопотно даты и времени в комплекте с ранней Java, были вытеснены в рамках java.time встроенного в Java 8 и более поздних версий. Для Java 6 & 7 используйте back-port, ThreeTen-Backport, а для Android - их адаптацию, ThreeTenABP. Избегайте использования старого java.util.Date/.Calendar и т. Д.
LocalDate
Классы java.time включают LocalDate
для даты только значений без времени-дня и без часового пояса.
java.sql.Date
драйвера JDBC Надеюсь будет обновляться непосредственно иметь дело с типами java.time. До тех пор, используйте java.sql типы для перемещения данных в/из базы данных. Старый java.У классов sql есть новые методы to…
и valueOf
для преобразования с java.time. Наш интерес здесь находится в java.sql.Date
.
LocalDate localDate = myJavaSqlDate.toLocalDate();
Вы можете перейти в другое направление, для представления в базу данных.
java.sql.Date myJavaSqlDate = java.sql.Date.valueOf(localDate);
Генерация строки
Ни один из рассмотренных классов дат (java.util.Date, java.sql.Date, java.time.LocalDate) не имеют никакого «формат». Только текстовые представления их значений имеют формат. Если вам нужна строка, эти классы могут генерировать для вас объект String. Но не путайте этот объект String с объектом date-time, поскольку они полностью разделены и различны.
Метод toString
на LocalDate
используется стандарт ISO 8601 формат, такой как 2012-07-04
(что означает 4 июля 2012 г.).
String outputIso8601 = localDate.toString();
Для других форматов используйте DateTimeFormatter
. Многие другие вопросы и ответы о переполнении стека имеют больше дискуссий.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String output = localDate.format(formatter); // Generates a textual representation of the object’s date-only value.
Еще лучше, позвольте java.time локализовать для вас.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
formatter = formatter.withLocale(Locale.CANADA_FRENCH); // or Locale.US, and so on.
String output = localDate.format(formatter);
О java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.
Вы можете обмениваться java.time объекты непосредственно у вашей базы данных. Используйте JDBC driver, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в классах java.sql.*
.
Где получить классы java.time?
- Java SE 8, Java SE 9, а затем
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
- Android
- Более поздние версии Android реализаций пачке классов java.time.
- Для более ранних Android (< 26) проект ThreeTenABP адаптируется ThreeTen-Backport (упомянутый выше). См. How to use ThreeTenABP….
ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
FYI, неприятные старые классы времени, такие как ['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) и' java.text.SimpleDateFormat' теперь [наследие ] (https://en.wikipedia.org/wiki/Legacy_system), вытесненный [* java.time *] (https://docs.oracle.com/javase/9/docs/api/java/time/ package-summary.html), встроенные в Java 8 и Java 9. См. [* Tutorial * by Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –