Here you can find the source of age(Date birthdate, Date asOf)
Parameter | Description |
---|---|
birthdate | The start date to start the age computation. |
asOf | The end date for the age computation |
public static int[] age(Date birthdate, Date asOf)
//package com.java2s; /*//w w w .j ava 2s . c o m * CONFIDENTIAL AND PROPRIETARY SOURCE CODE OF * Institute of Systems Science, National University of Singapore * * Copyright 2012 Team 4(Part-Time), ISS, NUS, Singapore. All rights reserved. * Use of this source code is subjected to the terms of the applicable license * agreement. * * ----------------------------------------------------------------- * REVISION HISTORY * ----------------------------------------------------------------- * DATE AUTHOR REVISION DESCRIPTION * 10 March 2012 Chen Changfeng 0.1 Class creating * * * * * */ import java.util.*; public class Main { /** * Compute the age returning an array of integers, for year, month, and day respectively. * <p> * @param birthdate The start date to start the age computation. * @param asOf The end date for the age computation * @return The age in years, months, days in the 0, 1, 2 indices respectively. */ public static int[] age(Date birthdate, Date asOf) { Calendar from = Calendar.getInstance(); Calendar to = Calendar.getInstance(); from.setTime(birthdate); to.setTime(asOf); int birthYYYY = from.get(Calendar.YEAR); int birthMM = from.get(Calendar.MONTH); int birthDD = from.get(Calendar.DAY_OF_MONTH); int asofYYYY = to.get(Calendar.YEAR); int asofMM = to.get(Calendar.MONTH); int asofDD = to.get(Calendar.DAY_OF_MONTH); int ageInYears = asofYYYY - birthYYYY; int ageInMonths = asofMM - birthMM; int ageInDays = asofDD - birthDD; if (ageInDays < 0) { // Guaranteed after this single treatment, ageInDays will be >= 0. // i.e. ageInDays = asofDD - birthDD + daysInBirthMM. ageInDays += from.getActualMaximum(Calendar.DAY_OF_MONTH); ageInMonths--; } if (ageInDays == to.getActualMaximum(Calendar.DAY_OF_MONTH)) { ageInDays = 0; ageInMonths++; } if (ageInMonths < 0) { ageInMonths += 12; ageInYears--; } if (birthYYYY < 0 && asofYYYY > 0) ageInYears--; if (ageInYears < 0) { ageInYears = 0; ageInMonths = 0; ageInDays = 0; } int[] result = new int[3]; result[0] = ageInYears; result[1] = ageInMonths; result[2] = ageInDays; return result; } /** * Retrieves the value of the field in the Date. * Some common fields that is likely to be used include : * <p> * <li>Calendar.YEAR - retrieves the year value * <li>Calendar.MONTH - retrieves the month value ( 1 - 12 ) * <li>Calendar.DAY_OF_MONTH - retrieve the day value ( 1 - 31 ) * <li>Calendar.HOUR - retrieves the hours value in 12 hour format ( 1 - 12 ) * <li>Calendar.HOUR_OF_DAY - retrieves the hours value in 24 hour format ( 0 - 23 ) * <li>Calendar.MINUTE - retrieves the minutes value ( 0 - 59 ) * <li>Calendar.AM_PM - retrieves the am/pm value ( 0 = am; 1 = pm ) * <p> * @param date The Date object to extract value from. * @param field A Calendar constant to retrieve the field value from the Date * object. * @return The value of the field that is requested. * @throws ArrayIndexOutOfBoundsException - if specified field is out of * range (<code>field</code> < 0 || <code>field</code> >= <code>Calendar.FIELD_COUNT</code>). * @see java.util.Calendar */ public static int get(Date date, int field) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int value = cal.get(field); // Add 1 if the field is Calendar.MONTH since Calendar returns // the month value starting from 0. if (Calendar.MONTH == field) value += 1; // If it is 12 am/pm, the value will be 0. Need to change it to 12 for ease of display. if (Calendar.HOUR == field && value == 0) value = 12; return value; } }