Android 如何获取从特定日期算起的总月数?

Android 如何获取从特定日期算起的总月数?,android,datetime,jodatime,Android,Datetime,Jodatime,我是Android新手。我有一个要求,我有一个字段来输入一个人的出生日期。选择成功后,我想返回从出生日期到当前日期的总月数。例如,如果我输入的出生日期为2012年10月19日,我想返回36个月。我搜索了这个,但是没有找到任何适合我的要求。这是我当前返回成功数据的代码 private void showDate(int year, int month, int day) { Calendar cal = Calendar.getInstance(); cal.setTimeInM

我是Android新手。我有一个要求,我有一个字段来输入一个人的出生日期。选择成功后,我想返回从出生日期到当前日期的总月数。例如,如果我输入的出生日期为2012年10月19日,我想返回36个月。我搜索了这个,但是没有找到任何适合我的要求。这是我当前返回成功数据的代码

private void showDate(int year, int month, int day) {

    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(0);
    cal.set(year, month, day);
    Date date = cal.getTime();
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

    if(System.currentTimeMillis() > date.getTime()) {
        edtDate.setText(sdf.format(date));
        LocalDate date1 = new LocalDate(date);
        LocalDate date2 = new LocalDate(new java.util.Date());
        PeriodType monthDay = PeriodType.yearMonthDayTime();
        Period difference = new Period(date1, date2, monthDay);
        int months = difference.getMonths();
        months=months + 1;
        System.out.println("16102015:Nunber of Months"+months);
    }else{
        Toast.makeText(mActivity,getResources().getString(R.string.date_validationmsg),Toast.LENGTH_LONG).show();
    }


}

使用JodaTime非常简单:

int nMonths=新周期开始时间,endTime.getMonths


使用JodaTime非常简单:

int nMonths=新周期开始时间,endTime.getMonths


首先,我建议在计算中使用而不是。理想情况下,根本不要使用java.util.Date,而是将输入作为LocalDate开始,例如直接解析文本,或者将数据从哪里来。将两个日期中的月日设置为1,然后以月为单位计算差值:

private static int monthsBetweenDates(LocalDate start, LocalDate end) {
    start = start.withDayOfMonth(1);
    end = end.withDayOfMonth(1);
    return Months.monthsBetween(start, end).getMonths();
}
更新1

请参阅链接OP接受相同的答案,因为Months.monthsBetween方法不适合他

更新2


首先,我建议在计算中使用而不是。理想情况下,根本不要使用java.util.Date,而是将输入作为LocalDate开始,例如直接解析文本,或者将数据从哪里来。将两个日期中的月日设置为1,然后以月为单位计算差值:

private static int monthsBetweenDates(LocalDate start, LocalDate end) {
    start = start.withDayOfMonth(1);
    end = end.withDayOfMonth(1);
    return Months.monthsBetween(start, end).getMonths();
}
更新1

请参阅链接OP接受相同的答案,因为Months.monthsBetween方法不适合他

更新2


使用此代码计算两个日期之间的月份

public static int monthsBetweenUsingJoda(Date d1, Date d2) {
    return Months.monthsBetween(new LocalDate(d1.getTime()), new LocalDate(d2.getTime())).getMonths();
}

使用此代码计算两个日期之间的月份

public static int monthsBetweenUsingJoda(Date d1, Date d2) {
    return Months.monthsBetween(new LocalDate(d1.getTime()), new LocalDate(d2.getTime())).getMonths();
}
使用Joda时间库,我能够得到想要的结果。 尝试下面的代码,它将在几个月内给出所需的差异

    DateTime date1 = new DateTime().withDate(2012, 10, 19);
    DateTime today = new DateTime().withDate(2015, 10, 19);
    // calculate month difference
    int diffMonths = Months.monthsBetween(date1.withDayOfMonth(1), today.withDayOfMonth(1)).getMonths();
使用Joda时间库,我能够得到想要的结果。 尝试下面的代码,它将在几个月内给出所需的差异

    DateTime date1 = new DateTime().withDate(2012, 10, 19);
    DateTime today = new DateTime().withDate(2015, 10, 19);
    // calculate month difference
    int diffMonths = Months.monthsBetween(date1.withDayOfMonth(1), today.withDayOfMonth(1)).getMonths();


你的问题到底是什么?@robodev我想从我选择的日期算起总月数?OK,检查我的答案如果你不想使用JodaTime,请将两个日期传递给函数你的问题到底是什么?@robodev我想从我选择的日期算起总月数?OK,检查我的答案如果您不想使用JodaTimeCan,请将两个日期传递给函数。我的输入如上面的代码Date Date=cal.getTime所示;哪一个是开始日期。@NoufalM您检查了答案了吗?让我们看看。您能建议输入吗。我的输入如上面的代码date date=cal.getTime;哪一个是开始日期。@Noufall您检查了答案了吗?让我们来看看。我得到0作为输出我得到0作为输出如何使用GregorianCalendar将当前日期设置为结束日期您也可以使用java日期谢谢它似乎得到了输出。对您的答案投了赞成票。如果答案满足我的要求,我将验证答案。我想添加DOB的具体月数,并显示确切日期-日、月、年。如果我有日期2014年2月20日,加上3个月,我必须显示2014年5月20日。你能帮忙吗?calendar.addCalendar.MONTH,1;如何使用Gregoriacalendar将当前日期设置为endDate您也可以简单地使用java日期感谢它似乎获得了输出。对您的答案投了赞成票。如果答案符合我的要求,我将验证答案。我想在DOB中添加具体的月数,并显示确切的日期-天、月、月、,一年。如果我的日期是2014年2月20日,加上3个月,我必须显示2014年5月20日。你能帮忙吗?calendar.addCalendar.MONTH,1;