2015-10-19 40 views
0

我是新来的Android.I有一个要求,我有一个字段来输入一个人的出生日期。成功的选择我想返回从DOB到当前日期的总月数。例如,如果我进入DOB为19/10/2012,我想回到36(个月)。我搜索了这一点,但没有找到适合我的requirement.Here什么是我当前的代码,返回SUCESSFUL数据,如何从特定日期获取总月数?

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


} 
+0

实际上你的问题是什么? – droidev

+0

@robodev我想从我选择的日期获得总月数? –

+0

oke,检查我的答案通过两个日期的功能,如果你不想使用JodaTime – droidev

回答

2
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); 
+0

如何设置当前日期为endDate使用GregorianCalendar –

+0

你可以简单地使用你的java日期以及 –

+0

感谢它似乎越来越output.Voted你的答案。我会验证答案,如果它满足我的要求 –

2

要下手,我建议使用LocalDate代替DateTime的计算。理想情况下,根本不要使用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

看到this链接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) 
+0

你可以建议input.Mine如上面的代码所示Date date = cal.getTime();这是开始日期。 –

+0

谢谢dev。 upvoted你的答案。 –

+0

@NoufalM你检查了答案吗? – droidev

0

使用此代码来计算两个日期

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

使用乔达时库here之间的几个月里,我能得到期望的结果。 尝试下面的代码,它会给予所需的月份差异。

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(); 
相关问题