Return amount of days to end of year

2

How could I do to return the amount of days to the end of the year, relying on today.

import java.time.LocalDate;
import java.time.Month;
import java.time.Period;
import java.time.format.DateTimeFormatter;

public class TestLocalDate {

    public static void main(String[] args) {

        //Data de hoje
        LocalDate hoje = LocalDate.now();

        //ultimo dia do ano 31/12/2016
        LocalDate faltaFimDoAno = hoje.with(Month.DECEMBER).withDayOfMonth(31);


        System.out.println("Hoje: " + hoje.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"))); //saida: Hoje: 28/08/2016

        System.out.println("Ultimo dia do ano: " + faltaFimDoAno.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"))); //Saída: Ultimo dia do ano: 31/12/2016

        System.out.println("Quantidade dias para o fim do ano: " + Period.between(hoje, faltaFimDoAno).getDays()); //Quantidade dias para o fim do ano: 3

    }

}

The method Period.between(hoje, faltaFimDoAno).getDays()); is returning the number of days and not the total amount counting days, month and year.

    
asked by anonymous 28.08.2016 / 21:26

3 answers

3

Another alternative is to use the toDays of Duration.between :

import static java.time.temporal.TemporalAdjusters.lastDayOfYear;
//...

LocalDate hoje = LocalDate.now();
LocalDate faltaFimDoAno = hoje.with(lastDayOfYear());

long dias = Duration.between(hoje.atStartOfDay(), faltaFimDoAno.atStartOfDay()).toDays();

System.out.println("Quantidade de dias para o fim do ano: " + dias);

View DEMO

    
28.08.2016 / 22:13
3

Use ChronoUnit to make this comparison:

//Data de hoje
LocalDate hoje = LocalDate.now();
//ultimo dia do ano 31/12/2016
LocalDate faltaFimDoAno = hoje.with(Month.DECEMBER).withDayOfMonth(31);


System.out.println("Hoje: " + hoje.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"))); 

System.out.println("Ultimo dia do ano: " + faltaFimDoAno.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));

System.out.println("Quantidade dias para o fim do ano: " + ChronoUnit.DAYS.between(hoje, faltaFimDoAno));

Output:

  

Today: 08/28/2016
  Last day of the year: 12/31/2016
  Amount days to end of year: 125

See the ideone .

    
28.08.2016 / 21:37
1

If you'd like a solution using JAVA 1.8+ , you can use ChronoUnit , otherwise you can also do so below using Calendar and GregorianCalendar compatible with lower versions:

Calendar data1 = Calendar.getInstance();
Calendar data2 = new GregorianCalendar(data1.get(Calendar.YEAR), 11, 31);

int diasRestantes = data2.get(Calendar.DAY_OF_YEAR) - data1.get(Calendar.DAY_OF_YEAR);
System.out.println("Restam "diasRestantes + " dias para acabar o ano!");

Good Luck!

    
28.08.2016 / 22:12