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"
Period#getYearsP5Y8M11D 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);
}