Відповіді на цей питання assylias і відповіді на цей питання JB Nizet є правильними:
- Викличте новий метод перетворення, доданий до застарілого класу,
java.util.Date::toInstant
.
- Телефонуйте
Instant::atZone
, передаючи a ZoneId
, в результаті чого a ZonedDateTime
.
Але ваш приклад коду спрямований на квартали. Про це читайте далі.
Чверті
Не потрібно самостійно обробляти квартали. Використовуйте вже написаний та перевірений клас.
org.threeten.extra.YearQuarter
У java.time класи продовжені ThreeTen-Extra проекту. Серед безлічі зручних класів, що пропонуються в цій бібліотеці, ви знайдете Quarter
іYearQuarter
.
Спочатку дістаньте свій ZonedDateTime
.
ZonedId z = ZoneID.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = myJavaUtilDate.toInstant().atZone( z ) ;
Визначте рік-квартал для цієї конкретної дати.
YearQuarter yq = YearQuarter.from( zdt ) ;
Далі нам потрібна дата початку цього кварталу.
LocalDate quarterStart = yq.atDay( 1 ) ;
Хоча я не обов'язково рекомендую це робити, ви можете використовувати один рядок коду, а не реалізовувати метод.
LocalDate quarterStart =
YearQuarter
.from(
myJavaUtilDate
.toInstant()
.atZone(
ZoneID.of( "Africa/Tunis" )
)
)
.atDay( 1 )
;
До речі, якщо ви можете повністю відмовитися від використання java.util.Date
, зробіть це. Це жахливий клас, разом із такими братами та сестрами, як Calendar
. Використовуйте Date
лише там, де це потрібно, коли ви взаємодієте зі старим кодом, який ще не оновлений до java.time .
Про java.time
Java.time каркас вбудований в Java 8 і пізніших версій. Ці класи витісняти неприємні старі застарілі класи дати і часу , такі як java.util.Date
, Calendar
, і SimpleDateFormat
.
Щоб дізнатись більше, див. Підручник Oracle . І шукайте в Stack Overflow багато прикладів та пояснень. Специфікація - JSR 310 .
Проект Joda-Time , який зараз перебуває в режимі обслуговування , радить перейти на java.time класи .
Ви можете обмінювати об'єкти java.time безпосередньо з базою даних. Використовуйте драйвер JDBC, сумісний з JDBC 4.2 або новішою. Не потрібні рядки, не потрібні java.sql.*
класи.
Де отримати класи java.time?
Проект ThreeTen-Extra розширює java.time додатковими класами. Цей проект є полігоном для можливих майбутніх доповнень до java.time. Ви можете знайти деякі корисні класи тут , такі як Interval
, YearWeek
, YearQuarter
, і більш .