当前位置: 代码迷 >> Android >> 如何获得特定日期的月份总数?
  详细解决方案

如何获得特定日期的月份总数?

热度:48   发布时间:2023-08-04 10:22:43.0

我是Android新手,有一个要求,我要输入一个人的出生日期。选择成功后,我想返回从DOB到当前日期的总月数,例如,如果我输入了DOB 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();
    }


}
Calendar startCalendar = new GregorianCalendar();
startCalendar.setTime(startDate);
Calendar endCalendar = new GregorianCalendar();
endCalendar.setTime(endDate);

int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);

首先,我建议使用代替进行计算。 理想情况下,根本不要使用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

LocalDate userEnteredDate = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date));    
LocaleDate currentDate =  LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(new Date()));

int months = monthsBetweenDates(userEnteredDate, currentDate)

使用Joda-time库,我能够得到想要的结果。 试试下面的代码,它将以期望的月份差异。

    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();

使用JodaTime,这非常简单:

  • int nMonths = new Period(startTime, endTime).getMonths();

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

public static int monthsBetweenUsingJoda(Date d1, Date d2) {
    return Months.monthsBetween(new LocalDate(d1.getTime()), new LocalDate(d2.getTime())).getMonths();
}
  相关解决方案