Java Period Conversion dates to float

Viewed 129

I have day of birth and second LocalDate.now() I use Periof for print this

            Period test = Period.between(dateofbirth,LocalDate.now());

but if i want print this error "P5Y8M11D"

what can i do to get it- "You live in the world 10,23 years"

2 Answers

Period#getYears

P5Y8M11D is the default format of Period#toString. You can get the components of period e.g. years, months, days etc. from the object of Period as per your requirement using its corresponding accessor methods.

Demo:

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.time.Period;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        LocalDate dateofbirth = LocalDate.of(1975, 7, 15);
        Period test = Period.between(dateofbirth, LocalDate.now());
        System.out.printf("You have lived in the world for %d years.%n", test.getYears());

        double years = test.getYears() + test.getMonths() / 12.0 + test.getDays() / 365.0;
        System.out.printf("You have lived in the world for %.2f years.%n", years);

        DecimalFormat format = (DecimalFormat) NumberFormat.getNumberInstance(Locale.GERMAN);
        format.applyPattern("#,##0.00");
        String formattedValue = format.format(years);
        System.out.printf("You have lived in the world for %s years.%n", formattedValue);
    }
}

Output:

You have lived in the world for 45 years.
You have lived in the world for 45.36 years.
You have lived in the world for 45,36 years.

You can use the epoch format to get secondes and compare them :

public static void main(String[] args) {
    LocalDate dateofbirth = LocalDate.of(1975, 7, 15);
    long duration = System.currentTimeMillis() / 1000 - dateofbirth.atStartOfDay().toEpochSecond(ZoneOffset.UTC);
    System.out.printf("You have lived in the world for %f years.%n", new Float(duration) / 3600 / 24 / 365);
}
Related