Расчет дней между двумя датами в Java 8
Я знаю, что есть много вопросов о том, как получить, но я хочу и пример использования нового Java 8 Date api. Я также знаю библиотеку JodaTime, но я хочу работать без внешних библиотек.
функция должна жаловаться с этими ограничениями:
- предотвратить ошибки от даты сохранения
- Input - это два объекта даты (без времени, я знаю localdatetime, но мне нужно сделать с экземплярами даты)
9 ответов:
если вы хотите логические календарных дней используйте
DAYS.between()методjava.time.temporal.ChronoUnit:LocalDate dateBefore; LocalDate dateAfter; long daysBetween = DAYS.between(dateBefore, dateAfter);если вы хотите буквальные 24 часа в сутки, (a продолжительность), вы можете использовать
Durationкласс:LocalDate today = LocalDate.now() LocalDate yesterday = today.minusDays(1); // Duration oneDay = Duration.between(today, yesterday); // throws an exception Duration.between(today.atStartOfDay(), yesterday.atStartOfDay()).toDays() // another optionдля получения дополнительной информации см. документ (и другие документы re: Java 8 от Oracle).
на основе комментариев VGR вот что вы можете использовать:
ChronoUnit.DAYS.between(firstDate, secondDate)
можно использовать
until():LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4); LocalDate christmas = LocalDate.of(2014, Month.DECEMBER, 25); System.out.println("Until christmas: " + independenceDay.until(christmas)); System.out.println("Until christmas (with crono): " + independenceDay.until(christmas, ChronoUnit.DAYS));
можно использовать
DAYS.betweenСjava.time.temporal.ChronoUnitнапример
import java.time.temporal.ChronoUnit; public long getDaysCountBetweenDates(LocalDate dateBefore, LocalDate dateAfter) { return DAYS.between(dateBefore, dateAfter); }
используйте дни в перечислении java.время.временной.ChronoUnit . Ниже приведен пример кода :
выход : *Количество дней между датой начала: 2015-03-01 и датой окончания: 2016-03-03 is = = > 368. ** Количество дней между датой начала: 2016-03-03 и датой окончания: 2015-03-01 is ==> -368*
package com.bitiknow.date; import java.time.LocalDate; import java.time.temporal.ChronoUnit; /** * * @author pradeep * */ public class LocalDateTimeTry { public static void main(String[] args) { // Date in String format. String dateString = "2015-03-01"; // Converting date to Java8 Local date LocalDate startDate = LocalDate.parse(dateString); LocalDate endtDate = LocalDate.now(); // Range = End date - Start date Long range = ChronoUnit.DAYS.between(startDate, endtDate); System.out.println("Number of days between the start date : " + dateString + " and end date : " + endtDate + " is ==> " + range); range = ChronoUnit.DAYS.between(endtDate, startDate); System.out.println("Number of days between the start date : " + endtDate + " and end date : " + dateString + " is ==> " + range); } }
вот так:
public class DemoDate { public static void main(String[] args) { LocalDate today = LocalDate.now(); System.out.println("Current date: " + today); //add 1 month to the current date LocalDate date2 = today.plus(1, ChronoUnit.MONTHS); System.out.println("Next month: " + date2); // Put latest date 1st and old date 2nd in 'between' method to get -ve date difference long daysNegative = ChronoUnit.DAYS.between(date2, today); System.out.println("Days : "+daysNegative); // Put old date 1st and new date 2nd in 'between' method to get +ve date difference long datePositive = ChronoUnit.DAYS.between(today, date2); System.out.println("Days : "+datePositive); } }
все говорят, чтобы использовать ChronoUnit.ДНИ.между ними, но это просто делегирует другой метод, который вы могли бы назвать самим собой. Так что вы могли бы сделать
firstDate.until(secondDate, ChronoUnit.DAYS).документы для обоих фактически упоминают оба подхода и говорят, чтобы использовать тот, который более удобочитаем.
получить количество дней до Рождества от текущего дня , попробуйте это
System.out.println(ChronoUnit.DAYS.between(LocalDate.now(),LocalDate.of(Year.now().getValue(), Month.DECEMBER, 25)));
получить дней между двумя датами дата является экземпляром java.утиль.Дата
public static long daysBetweenTwoDates(Date dateFrom, Date dateTo) { return DAYS.between(Instant.ofEpochMilli(dateFrom.getTime()), Instant.ofEpochMilli(dateTo.getTime())); }
Comments