【问题标题】:How to get accurate age(including year and months) from current date?如何从当前日期获得准确的年龄(包括年份和月份)?
【发布时间】:2015-05-18 08:55:48
【问题描述】:

我不仅想找到确切的年龄,还应该找到确切的月份。 即当前日期:18-05-2015,我要测试的日期是 01-01-2010-输出应该是 4年8个月。

public float getAge (int _year, int _month, int _day) {

    GregorianCalendar cal = new GregorianCalendar();
    int y, m, d,a,b;
    //float ans = 0;         
    y = cal.get(Calendar.YEAR);
    m = cal.get(Calendar.MONTH);
    d = cal.get(Calendar.DAY_OF_MONTH);
    cal.set(_year, _month, _day);
    a = y - (cal.get(Calendar.YEAR));
   // b=m-(cal.get(Calendar.MONTH));
    if ((m < cal.get(Calendar.MONTH))
                    || ((m == cal.get(Calendar.MONTH)) && (d < cal
                                    .get(Calendar.DAY_OF_MONTH)))) {
            --a;
    }
    if(a < 0)
            throw new IllegalArgumentException("Age < 0");

    ans=a;
    return ans;
}

【问题讨论】:

  • 以月计算日期差。然后使用整数除以 12。然后执行取模。划分的结果是年份。其余的(取模的结果)是月份。

标签: android methods datepicker monthcalendar


【解决方案1】:

使用Joda时间。最好计算日期差异。Downloadjoda-time.jar并粘贴到库中。

然后使用以下代码:

public static String getTimestampDiff() {
        final DateTime start = new DateTime(datefrom.getTime());
        final DateTime end = new DateTime(dateto.getTime());
        Period p = new Period(start, end);
        PeriodFormatter formatter = new PeriodFormatterBuilder()
        .printZeroAlways().minimumPrintedDigits(2).appendYears()
        .appendSuffix(" year", " years").appendSeparator(", ")
        .appendMonths().appendSuffix(" month", " months").toFormatter();
        /* .appendSeparator(", ").appendDays()
                        .appendSuffix(" day", " days").appendSeparator(" and ")
                        .appendHours().appendLiteral(":").appendMinutes()
                        .appendLiteral(":").appendSeconds().toFormatter();*/
        return p.toString(formatter);
    }

您应该将 datefrom 和 dateto 声明为 Date 类的引用,例如:static Date datefrom,dateto;,并形成 datefrom 对象,例如:

private DatePickerDialog.OnDateSetListener pickerListener1 = new DatePickerDialog.OnDateSetListener() {

        // when dialog box is closed, below method will be called.
        @SuppressWarnings("deprecation")
        @Override
        public void onDateSet(DatePicker view, int selectedYear,
                int selectedMonth, int selectedDay) {

            datepickeryear  = selectedYear;
            datepickermonth = selectedMonth;
            datepickerday   = selectedDay;
            // Show selected date
            edfromdate.setText(new StringBuilder().append(datepickeryear)
                    .append("-").append(datepickermonth + 1)
                    .append("-").append(datepickerday).append(" "));

            datefrom =new Date(datepickeryear, datepickermonth+1, datepickerday);

        }
    };

这里我使用了一个日期选择器,但你可以形成自己的日期对象

【讨论】:

    猜你喜欢
    • 2013-02-15
    • 2020-07-10
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多