YYYY MM DDThh:MM:ss字符串到java中的年龄

YYYY MM DDThh:MM:ss字符串到java中的年龄,java,xml,date,Java,Xml,Date,我有一个格式为YYYY-MM-DDThh:MM:ss的字符串,它是从xml文件中提取的 此字符串表示出生日期 如何使用java查找此人的年龄(以年为单位)?使用特定的日期格式,可以按以下方式计算年龄: public class AgeCalculator { public static int calculateAge(Date birthdate) { Calendar birth = Calendar.getInstance(); birth.setTime(birthda

我有一个格式为YYYY-MM-DDThh:MM:ss的字符串,它是从xml文件中提取的

此字符串表示出生日期


如何使用java查找此人的年龄(以年为单位)?

使用特定的日期格式,可以按以下方式计算年龄:

public class AgeCalculator {

public static int calculateAge(Date birthdate) {
    Calendar birth = Calendar.getInstance();
    birth.setTime(birthdate);
    Calendar today = Calendar.getInstance();

    int yearDifference = today.get(Calendar.YEAR) - birth.get(Calendar.YEAR);

    if (today.get(Calendar.MONTH) < birth.get(Calendar.MONTH)) {
        yearDifference--;
    } else {
        if (today.get(Calendar.MONTH) == birth.get(Calendar.MONTH)
                && today.get(Calendar.DAY_OF_MONTH) < birth.get(Calendar.DAY_OF_MONTH)) {
            yearDifference--;
        }
    }
    return yearDifference;
}

public static void main(String[] args) throws ParseException {
    // date format yyyy-MM-dd'T'HH:mm:ss
    String birthdateStr = "2013-07-09T12:17:58-04:00";
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    Date birthdate = df.parse(birthdateStr);
    System.out.println(AgeCalculator.calculateAge(birthdate));
}
}

出生日期通常只是一个日期,而不是时间。如果您要包括一个时间,您需要知道时区,或者假设所有计算都在同一时区,而该时区没有日光节约,那么您希望计算年龄的详细程度是多少?以年为单位。我已经编辑了这个问题。谢谢,我无法理解,经过这么多年的开发经验,您仍然无法理解规范之间的差异。这不是一个重复的问题,但出于一些有趣的原因,您敦促将其标记为这样。ChronoUnit.YEARS.between LocalDateTime.parse 1960-01-23T12:34:56。toLocalDate,LocalDate.now ZoneId.of Africa/Tunis所有这些已经被多次讨论过了。在发布前搜索并研究堆栈溢出。请不要教年轻人使用过时且臭名昭著的SimpleDateFormat类以及同样过时的日期和日历。至少不是第一个选择。而且不是毫无保留的。今天我们有了更好的in和它的DateTimeFormatter。