نعم يمكننا الحصول على عمر شخص معين انطلاقا من استعمال التاريخ Date و Calendar classes -كلاسات الكالندار-، حيث ترتكز هذه الطريقة على أساسيات لغة جافا، والتي يمكن لأي أحد ملمّ بأساسيات اللغة إنجازها.
نبدأ بملف Age.java:
class Age
{
private int days;
private int months;
private int years;
private Age()
{
//الافتراضي constructor
}
public Age(int days, int months, int years)
{
this.days = days;
this.months = months;
this.years = years;
}
public int getDays()
{
return this.days;
}
public int getMonths()
{
return this.months;
}
public int getYears()
{
return this.years;
}
@Override
public String toString()
{
return years + " Years, " + months + " Months, " + days + " Days";
}
}
حيث تقبل الوظيفة Age ثلاث عناصر: اليوم، الشهر والسنة أي عناصر التاريخ الأساسية، مع gets و Tostring لتحويل التاريخ إلى نص.
الكلاس الثانية هي: AgeCalculator، حيث تقوم هذه الأخيرة بحساب العمر انطلاقا من تاريخ Age بحساب الفرق مقارنة مع تاريخ اليوم:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class AgeCalculator
{
private static Age calculateAge(Date birthDate)
{
int years = 0;
int months = 0;
int days = 0;
// خاص بتاريخ الازدياد المدخل سابقا calendar
Calendar birthDay = Calendar.getInstance();
birthDay.setTimeInMillis(birthDate.getTime());
// خاص بتاريخ اليوم calendar
long currentTime = System.currentTimeMillis();
Calendar now = Calendar.getInstance();
now.setTimeInMillis(currentTime);
//الفرق بين السنوات
years = now.get(Calendar.YEAR) - birthDay.get(Calendar.YEAR);
int currMonth = now.get(Calendar.MONTH) + 1;
int birthMonth = birthDay.get(Calendar.MONTH) + 1;
//الفرق بين الأشهر
months = currMonth - birthMonth;
//فحص فرق الأشهر
if (months < 0)
{
years--;
months = 12 - birthMonth + currMonth;
if (now.get(Calendar.DATE) < birthDay.get(Calendar.DATE))
months--;
} else if (months == 0 && now.get(Calendar.DATE) < birthDay.get(Calendar.DATE))
{
years--;
months = 11;
}
//حساب الفرق بين الأيام
if (now.get(Calendar.DATE) > birthDay.get(Calendar.DATE))
days = now.get(Calendar.DATE) - birthDay.get(Calendar.DATE);
else if (now.get(Calendar.DATE) < birthDay.get(Calendar.DATE))
{
int today = now.get(Calendar.DAY_OF_MONTH);
now.add(Calendar.MONTH, -1);
days = now.getActualMaximum(Calendar.DAY_OF_MONTH) - birthDay.get(Calendar.DAY_OF_MONTH) + today;
} else
{
days = 0;
if (months == 12)
{
years++;
months = 0;
}
}
//إنشاء تاريخ ازدياد جديد
return new Age(days, months, years);
}
عملية الحساب انطلاقا من Main:
public static void main(String[] args) throws ParseException
{
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date birthDate = sdf.parse("29/11/1981"); //Yeh !! It's my date of birth :-)
Age age = calculateAge(birthDate);
//العمر هو
System.out.println(age);
}
}
المُخرجات:
32 Years, 5 Months, 27 Days
يمكنك أيضا الاعتماد على الطريقة المقدمة هنا.