Как говорится в the documentation, Period
это период времени в днях, месяцев и лет; ваш пример - «один месяц».
Число секунд в месяце не является фиксированным значением. Февраль имеет 28 или 29 дней, в то время как декабрь имеет 31, поэтому «один месяц» от (скажем) 12 февраля имеет меньше секунд, чем «один месяц» с 12 декабря. В некоторых случаях (например, в прошлом году) в декабре есть прыжок. В зависимости от часового пояса и месяца у него могут быть дополнительные 30 минут, час или полтора часа; или намного меньше обычного, благодаря входу или выключению летнего времени.
Вы можете только спросить «Начиная с этой даты в этот часовой пояс, сколько секунд там в следующий [период] времени?» (или попеременно: «Сколько секунд в последний период [до] [дата-время-время]?»). Вы не можете запросить его без контрольной точки, это не имеет смысла.(Теперь вы обновили вопрос, чтобы добавить контрольную точку:. «Сейчас»)
Если ввести контрольную точку, то вы можете использовать Temporal
(как LocalDateTime
или ZonedDateTime
) в качестве опорной точки и используйте его метод until
с ChronoUnit.MILLIS
. Например, местное время, начиная с «сейчас»:
LocalDateTime start = LocalDateTime.now();
Period period = Period.parse("P1M");
LocalDateTime end = start.plus(period);
long milliseconds = start.until(end, ChronoUnit.MILLIS);
System.out.println(milliseconds);
Live Copy
Естественно, что может быть более кратким, я хотел показать каждый шаг. Более кратким:
LocalDateTime start = LocalDateTime.now();
System.out.println(start.until(start.plus(Period.parse("P1M")), ChronoUnit.MILLIS));
['Period'] (https://docs.oracle.com/javase/8/docs/api/java/time/Period.html) описывается как« время, основанное на дате ». Он не поддерживает поля мельче, чем дни. Что может быть правильным ответом на «количество секунд за один месяц»? – khelwood
Так что я не понял. Более старый класс javax.xml.datatype.Duration намного лучше, чем новый java.time.Period и Duration duo? Я думал, что переход на Java 8 принесет мне пользу, но я вижу, что лучше остаться со старым кодом и не трогать классы Period и Duriation из Java 8. –