اذهب إلى المحتوى
  • 0

كيف يمكنني حساب عمر الشخص من تاريخ ميلاده باستخدام لغة جافا؟

TheBrain

السؤال

Recommended Posts

  • 1

نعم يمكننا الحصول على عمر شخص معين انطلاقا من استعمال التاريخ 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

يمكنك أيضا الاعتماد على الطريقة المقدمة هنا.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

توجد عدة طرق لفعل ذلك، فإذا كنت تستخدم الإصدار الثامن من جافا فيمكنك فعل ذلك بكل سهولة عبر حساب عدد السنوات بين تاريخين كما في المثال التالي:

LocalDate start = LocalDate.of(1996, 2, 29);
LocalDate end = LocalDate.of(2014, 2, 28); // use for age-calculation: LocalDate.now()
long years = ChronoUnit.YEARS.between(start, end);
System.out.println(years); // 17

أو يمكنك استخدام JODA في حال استخدامك لاصدار جافا أقدم من الإصدار السابق كما في المثال التالي:

LocalDate birthdate = new LocalDate(1996, 2, 29);
LocalDate now = new LocalDate(2014, 2, 28); // test, in real world without args
Years age = Years.yearsBetween(birthdate, now);
System.out.println(age.getYears());

توجد طرق أخرى لفعل ذلك لكن ذكرنا هنا أشهرها.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

السلام عليكم كيفية الحصول علي العمر من تاريخ الميلاد من خلال برنامج جافا ونت بنز

وكيفية كتابة تاريخ الميلاد في  text field ولا من خلال formatted field 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 54 دقائق مضت قال اشرف حسونه:

السلام عليكم كيفية الحصول علي العمر من تاريخ الميلاد من خلال برنامج جافا ونت بنز

وكيفية كتابة تاريخ الميلاد في  text field ولا من خلال formatted field 

عليك باستخدام مكتبة java.time المتوفرة في Java 8 وما بعدها، واستخدام الكود التالي كنموذج لحساب العمر:

import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;

public class AgeCalculator {
    public static void main(String[] args) {
        // تاريخ الميلاد المُدخل
        String birthDateStr = "1990-01-01"; // يجب تغييره إلى التاريخ الفعلي المُدخل
        
        // تحويل النص إلى تاريخ
        LocalDate birthDate = LocalDate.parse(birthDateStr);
        
        // الحصول على التاريخ الحالي
        LocalDate currentDate = LocalDate.now();
        
        // حساب العمر باستخدام الفارق بين التواريخ
        Period age = Period.between(birthDate, currentDate);
        
        // عرض العمر بصيغة مناسبة
        System.out.println("عمر الشخص هو: " + age.getYears() + " سنة، " + age.getMonths() + " شهر، " + age.getDays() + " يوم");
    }
}

وبالنسبة لكتابة تاريخ الميلاد في TextField، فتستطيع استخدام النص العادي في الـ TextField.

لكن إذا كنت ترغب في استخدام FormattedTextField لضمان أن المستخدم يدخل التاريخ بتنسيق محدد، فبإمكانك استخدام SimpleDateFormat للتحقق من صحة التنسيق.

وإليك مثال عن كيفية استخدام FormattedTextField والتحقق من التنسيق:

import java.awt.FlowLayout;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.MaskFormatter;

public class BirthdayInputExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("إدخال تاريخ الميلاد");
        frame.setLayout(new FlowLayout());
        
        try {
            // تحديد التنسيق المطلوب لتاريخ الميلاد (yyyy-MM-dd)
            MaskFormatter formatter = new MaskFormatter("####-##-##");
            formatter.setPlaceholderCharacter('_');
            
            // إنشاء الـ FormattedTextField
            JFormattedTextField birthDateField = new JFormattedTextField(formatter);
            birthDateField.setColumns(10);
            
            frame.add(birthDateField);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 100);
        frame.setVisible(true);
    }
}

حيث تستخدم MaskFormatter لتحديد التنسيق المطلوب لتاريخ الميلاد، وتعيين حرف النقطة للمساعدة في تحديد موقع الأرقام، ثم استخدام setColumns لتحديد عرض الـ FormattedTextField.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 ساعة قال اشرف حسونه:

اريد كيفية كتابة الكود في netbeans في text field اخر لاظهار كم عمره

  1. عليك بإنشاء واجهة المستخدم في NetBeans، واستخدام JFrame و JTextField لإنشاء مربع نص لإدخال تاريخ الميلاد وزر لحساب العمر، عن طريق نافذة الجديدة، اختر "Java" من القائمة الجانبية اليسرى وحدد "Java Application" ثم انقر فوق "الزر التالي".
  2. بعد ذلك أضف إلى واجهة المستخدم مربع نص JTextField لإدخال تاريخ الميلاد وزر JButton لحساب العمر.
  3. ثم كتابة الكود للحصول على تاريخ الميلاد المدخل وحساب العمر، وسيكون الكود لديك كالتالي بناءًا على الخطوات السابقة:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class AgeCalculator extends JFrame {
    private JTextField dateOfBirthTextField;
    private JButton calculateButton;
    private JLabel ageLabel;
    
    public AgeCalculator() {
        initComponents();
    }
    
    private void initComponents() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("حاسبة العمر");
        
        JPanel panel = new JPanel();
        dateOfBirthTextField = new JTextField(10);
        calculateButton = new JButton("احسب العمر");
        ageLabel = new JLabel();
        
        calculateButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                calculateAge();
            }
        });
        
        panel.add(dateOfBirthTextField);
        panel.add(calculateButton);
        panel.add(ageLabel);
        
        add(panel);
        pack();
        setVisible(true);
    }
    
    private void calculateAge() {
        String dateOfBirthStr = dateOfBirthTextField.getText();
        
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        try {
            Date dateOfBirth = dateFormat.parse(dateOfBirthStr);
            Calendar today = Calendar.getInstance();
            Calendar birthDate = Calendar.getInstance();
            birthDate.setTime(dateOfBirth);
            
            int age = today.get(Calendar.YEAR) - birthDate.get(Calendar.YEAR);
            
            if (today.get(Calendar.DAY_OF_YEAR) < birthDate.get(Calendar.DAY_OF_YEAR)) {
                age--;
            }
            
            ageLabel.setText("عمرك هو " + age + " سنة.");
        } catch (Exception e) {
            ageLabel.setText("تاريخ الميلاد غير صالح.");
        }
    }
    
    public static void main(String[] args) {
        new AgeCalculator();
    }
}

بعد تشغيل البرنامج ستظهر واجهة المستخدم الخاصة بحاسبة العمر، فقم بإدخال تاريخ الميلاد بتنسيق "dd/MM/yyyy" في مربع النص وانقر على زر "احسب العمر" لعرض العمر في التسمية.

ولاحظ أن تنسيق تاريخ الميلاد هو "dd/MM/yyyy"، وفي حال كان تنسيق تاريخ الميلاد لديك مختلفًا، يجب تعديل الكود وفقًا لذلك.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...