如何使用java中的月日yyyy格式计算dob的年龄?例(1999年3月2日)



下面的当前代码使用yyyy-mm-dd格式。然而,输入应该是这样的(1999年3月2日)。如何计算或转换它?

public class CalculateAgeJava8 {

public static void main(String[] args) {
System.out.print("Please enter date of birth: ");
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
scanner.close();

LocalDate dob = LocalDate.parse(input);
System.out.println("Age is:" + getAge(dob));
}

public static int getAge(LocalDate dob) {
LocalDate curDate = LocalDate.now();
return Period.between(dob, curDate).getYears();
}

}

您需要一个DateTimeFormatter以指定格式解析日期字符串,例如

import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.Scanner;
public class CalculateAgeJava8 {
public static void main(String[] args) {
System.out.print("Please enter date of birth in the format MMMM d, yyyy (e.g. March 2, 1999): ");
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM d, u", Locale.ENGLISH);
LocalDate dob = LocalDate.parse(input, dtf);
System.out.println("Age is:" + getAge(dob));
}
public static int getAge(LocalDate dob) {
LocalDate curDate = LocalDate.now();
return Period.between(dob, curDate).getYears();
}    
}

示例运行:

Please enter date of birth in the format MMMM d, yyyy (e.g. March 2, 1999): March 2, 1999
Age is:22

在这里,您可以使用y而不是u,但我更喜欢u而不是y

Trail: Date Time了解更多关于现代Date-Time API的信息.

注意:永远不要关闭Scanner(System.in),因为它也关闭了System.in,除了重新启动JVM之外,没有办法再次打开它,这意味着如果应用程序的其他部分正在使用System.in,它将导致异常。

您可以使用java.time.format.DateTimeFormatter

class CalculateAgeJava8 {
public static void main(String[] args) {
System.out.print("Please enter date of birth: ");
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
scanner.close();
DateTimeFormatter fm = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate dob = LocalDate.parse(input, fm);
System.out.println(dob);
System.out.println("Age is:" + getAge(dob));
}
public static int getAge(LocalDate dob) {
LocalDate curDate = LocalDate.now();
return Period.between(dob, curDate).getYears();
}
}

最新更新