DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm");
// The given data
String dateTimeString = "2015-01-01 20:00";
Period twoMonthsAndFiveDays = Period.ofMonths(2).plusDays(5);
ZonedDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter)
.atZone(ZoneId.systemDefault());
Instant newTime = dateTime.plus(twoMonthsAndFiveDays)
.toInstant();
Date oldfashionedDateObject = Date.from(newTime);
System.out.println(oldfashionedDateObject);
Я установил для своего часового пояса Азию / Коломбо, запустил этот фрагмент и получил:
Пт 06 марта, 20:00:00 IST 2015
Если вам нужно начать с Date
, который приходит из ваших предопределенных унаследованных классов:
// The given data
Date originalDate = getDateFromLegacyApi();
Period twoMonthsAndFiveDays = Period.ofMonths(2).plusDays(5);
Instant newTime = originalDate.toInstant()
.atZone(ZoneId.systemDefault())
.plus(twoMonthsAndFiveDays)
.toInstant();
Date oldfashionedDateObject = Date.from(newTime);
Итак, преобразования
java.util.Date <--> Instant <--> ZonedDateTime
A ZonedDateTime
знает, как добавить Period
. Выполняйте преобразования в Date
и обратно только тогда, когда вам это необходимо для обеспечения совместимости с вашими унаследованными классами.