如何计算java中两个日期之间的年龄或差异

 leedaning 发布于 2023-02-12 14:46

我想得到2个日期之间的月数.日期是某人生日和当前日期.所以我得到两个日期之间的年数而不是月数.

假设我的日期是06/09/201106/11/2012.所以我希望答案是1年2个月.我得到的一年而不是月份.请帮助.下面是获取年数的代码

 public int getAge(Date dateOfBirth)      {                                                                                                                                                                         

    today = Calendar.getInstance(); 
    Calendar birthDate = Calendar.getInstance();

    birthDate.setTime(dateOfBirth);
    if (birthDate.after(today)) {
        throw new IllegalArgumentException("Can't be born in the future");
    }

    age = today.get(Calendar.YEAR) - birthDate.get(Calendar.YEAR);
    month = today.get(Calendar.MONTH) - birthDate.get(Calendar.MONTH);

    if ( (birthDate.get(Calendar.DAY_OF_YEAR) - today.get(Calendar.DAY_OF_YEAR) > 3) ||
            (birthDate.get(Calendar.MONTH) > today.get(Calendar.MONTH ))){
        days = birthDate.get(Calendar.DAY_OF_MONTH) - today.get(Calendar.DAY_OF_MONTH);
        age--;

        Toast.makeText(getApplicationContext(), "inside if", Toast.LENGTH_SHORT).show();
        Log.e("month is",month+"");
        Log.e("Days",days+ " left");


    }else if ((birthDate.get(Calendar.MONTH) == today.get(Calendar.MONTH )) &&
              (birthDate.get(Calendar.DAY_OF_MONTH) > today.get(Calendar.DAY_OF_MONTH ))){
        Toast.makeText(getApplicationContext(), "inside else if", Toast.LENGTH_SHORT).show();

        age--;
    }

    return age;

Mehul Joisar.. 5

我最近创建了一个演示并上传到这里.

它使用JodaTime库来获得有效的结果.

我希望它会有用.

截图:

截图

码:

MainActivity.java

public class MainActivity extends Activity {

    private SimpleDateFormat mSimpleDateFormat;
    private PeriodFormatter mPeriodFormat;

    private Date startDate;
    private Date endDate;
    private Date birthDate;


    private TextView tvStartDate,tvEndDate,tvDifferenceStandard,tvDifferenceCustom,tvBirthDate,tvAgeStandard,tvAgeCustom;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();

        //determine dateDiff
        Period dateDiff = calcDiff(startDate,endDate);
        tvDifferenceStandard.setText(PeriodFormat.wordBased().print(dateDiff));
        tvDifferenceCustom.setText( mPeriodFormat.print(dateDiff));


        //determine age
        Period age = calcDiff(birthDate,new Date());
        tvAgeStandard.setText(PeriodFormat.wordBased().print(age));
        tvAgeCustom.setText( mPeriodFormat.print(age));

    }

    private void init() {

        //ui
        tvStartDate = (TextView)findViewById(R.id.tvStartDate);
        tvEndDate = (TextView)findViewById(R.id.tvEndDate);
        tvDifferenceStandard = (TextView)findViewById(R.id.tvDifferenceStandard);
        tvDifferenceCustom = (TextView)findViewById(R.id.tvDifferenceCustom);
        tvBirthDate = (TextView)findViewById(R.id.tvBirthDate);
        tvAgeStandard = (TextView)findViewById(R.id.tvAgeStandard);
        tvAgeCustom = (TextView)findViewById(R.id.tvAgeCustom);



        //components
        mSimpleDateFormat = new SimpleDateFormat("dd/MM/yy");
        mPeriodFormat = new PeriodFormatterBuilder().appendYears().appendSuffix(" year(s) ").appendMonths().appendSuffix(" month(s) ").appendDays().appendSuffix(" day(s) ").printZeroNever().toFormatter();


        try {
            startDate = mSimpleDateFormat.parse(tvStartDate.getText().toString());
            endDate =  mSimpleDateFormat.parse(tvEndDate.getText().toString());
            birthDate = mSimpleDateFormat.parse(tvBirthDate.getText().toString());

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private Period calcDiff(Date startDate,Date endDate)
    {
        DateTime START_DT = (startDate==null)?null:new DateTime(startDate);
        DateTime END_DT = (endDate==null)?null:new DateTime(endDate);

        Period period = new Period(START_DT, END_DT);

        return period;

    }

}

activity_main.xml中





































注意:

1)不要忘记add JodaTime library你的项目

2)正如你在布局文件中看到的那样,我使用了固定值"Start Date","End Date" to calculate Date Difference和固定值"Birth Date" to calculate Age.你可以replace it with your dynamic values.

1 个回答
  • 我最近创建了一个演示并上传到这里.

    它使用JodaTime库来获得有效的结果.

    我希望它会有用.

    截图:

    截图

    码:

    MainActivity.java

    public class MainActivity extends Activity {
    
        private SimpleDateFormat mSimpleDateFormat;
        private PeriodFormatter mPeriodFormat;
    
        private Date startDate;
        private Date endDate;
        private Date birthDate;
    
    
        private TextView tvStartDate,tvEndDate,tvDifferenceStandard,tvDifferenceCustom,tvBirthDate,tvAgeStandard,tvAgeCustom;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            init();
    
            //determine dateDiff
            Period dateDiff = calcDiff(startDate,endDate);
            tvDifferenceStandard.setText(PeriodFormat.wordBased().print(dateDiff));
            tvDifferenceCustom.setText( mPeriodFormat.print(dateDiff));
    
    
            //determine age
            Period age = calcDiff(birthDate,new Date());
            tvAgeStandard.setText(PeriodFormat.wordBased().print(age));
            tvAgeCustom.setText( mPeriodFormat.print(age));
    
        }
    
        private void init() {
    
            //ui
            tvStartDate = (TextView)findViewById(R.id.tvStartDate);
            tvEndDate = (TextView)findViewById(R.id.tvEndDate);
            tvDifferenceStandard = (TextView)findViewById(R.id.tvDifferenceStandard);
            tvDifferenceCustom = (TextView)findViewById(R.id.tvDifferenceCustom);
            tvBirthDate = (TextView)findViewById(R.id.tvBirthDate);
            tvAgeStandard = (TextView)findViewById(R.id.tvAgeStandard);
            tvAgeCustom = (TextView)findViewById(R.id.tvAgeCustom);
    
    
    
            //components
            mSimpleDateFormat = new SimpleDateFormat("dd/MM/yy");
            mPeriodFormat = new PeriodFormatterBuilder().appendYears().appendSuffix(" year(s) ").appendMonths().appendSuffix(" month(s) ").appendDays().appendSuffix(" day(s) ").printZeroNever().toFormatter();
    
    
            try {
                startDate = mSimpleDateFormat.parse(tvStartDate.getText().toString());
                endDate =  mSimpleDateFormat.parse(tvEndDate.getText().toString());
                birthDate = mSimpleDateFormat.parse(tvBirthDate.getText().toString());
    
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        private Period calcDiff(Date startDate,Date endDate)
        {
            DateTime START_DT = (startDate==null)?null:new DateTime(startDate);
            DateTime END_DT = (endDate==null)?null:new DateTime(endDate);
    
            Period period = new Period(START_DT, END_DT);
    
            return period;
    
        }
    
    }
    

    activity_main.xml中

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    
    
    <TextView 
        android:layout_
        android:layout_
        android:text="Date Diff Calculator"
        android:text
        android:gravity="center"
        android:background="@android:color/darker_gray"
        />
    
    
    <TextView
        android:layout_
        android:layout_
        android:text
        android:text="Start Date:" />
    
    <TextView
        android:id="@+id/tvStartDate"
        android:layout_
        android:layout_
        android:text="06/09/2011" />
    
    <TextView
        android:layout_
        android:layout_
        android:text
        android:text="End Date:" />
    
    <TextView
        android:id="@+id/tvEndDate"
        android:layout_
        android:layout_
        android:text="29/10/2013" />
    
    <TextView
        android:layout_
        android:layout_
        android:text
        android:text="Difference (Standard)" />
    
    <TextView
        android:id="@+id/tvDifferenceStandard"
        android:layout_
        android:layout_
        android:text="result" />
    
    <TextView
        android:layout_
        android:layout_
        android:text
        android:text="Difference (Custom)" />
    
    <TextView
        android:id="@+id/tvDifferenceCustom"
        android:layout_
        android:layout_
        android:text="result" />
    
    
    <TextView 
        android:layout_
        android:layout_
        android:text="Age Calculator"
        android:text
        android:gravity="center"
        android:background="@android:color/darker_gray"
        />
    
    <TextView
        android:layout_
        android:layout_
        android:text
        android:text="Birth Date:" />
    
    <TextView
        android:id="@+id/tvBirthDate"
        android:layout_
        android:layout_
        android:text="01/09/1989" />
    
    <TextView
        android:layout_
        android:layout_
        android:text
        android:text="Age (Standard)" />
    
    <TextView
        android:id="@+id/tvAgeStandard"
        android:layout_
        android:layout_
        android:text="result" />
    
    <TextView
        android:layout_
        android:layout_
        android:text
        android:text="Age (Custom)" />
    
    <TextView
        android:id="@+id/tvAgeCustom"
        android:layout_
        android:layout_
        android:text="result" />
    

    注意:

    1)不要忘记add JodaTime library你的项目

    2)正如你在布局文件中看到的那样,我使用了固定值"Start Date","End Date" to calculate Date Difference和固定值"Birth Date" to calculate Age.你可以replace it with your dynamic values.

    2023-02-12 14:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有