Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to get number of months, weeks, days and hours from now to a future time?
    text
    copied!<p>I need to find out the number of months, weeks, days and hours left from now to a future time using Java. I can not use any third party library like Joda. How can I do that using just JDK classes? </p> <p>So far, this is what I have come up with. It sort of works, except for some situations:</p> <pre><code>public class DateUtil { public static Integer[] components(Date from, Date to) { Integer[] result = new Integer[4]; //SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); //df.setTimeZone(TimeZone.getTimeZone("EST")); Calendar fromCal = new GregorianCalendar(); Calendar toCal = new GregorianCalendar(); fromCal.setTime(from); toCal.setTime(to); int months = 0; do { fromCal.add(Calendar.MONTH, 1); ++months; //System.out.println(df.format(fromCal.getTime())); } while (fromCal.before(toCal)); fromCal.add(Calendar.MONTH, -1); --months; int days = 0; do { fromCal.add(Calendar.DAY_OF_YEAR, 1); ++days; } while (fromCal.before(toCal)); fromCal.add(Calendar.DAY_OF_YEAR, -1); --days; int hours = 0; do { fromCal.add(Calendar.HOUR_OF_DAY, 1); ++hours; } while (fromCal.before(toCal)); fromCal.add(Calendar.HOUR_OF_DAY, -1); --hours; int minutes = 0; do { fromCal.add(Calendar.MINUTE, 1); ++minutes; } while (fromCal.before(toCal)); result[0] = months; result[1] = days; result[2] = hours; result[3] = minutes; return result; } public static void main(String[] args) { try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); df.setTimeZone(TimeZone.getTimeZone("EST")); Date from = df.parse("2014-03-29 00:00"); Date to = df.parse("2014-05-29 00:00"); Integer result[] = components(from, to); System.out.printf("Months:%02d Days:%02d Hrs:%02d Mins:%02d\n", result[0], result[1], result[2], result[3]); } catch (Exception e) { e.printStackTrace(); } } } </code></pre> <p>It produces unacceptable results when you have February in the middle and start date is end of the month. For example:</p> <p>From: Dec 31, 2013 To: Dec 31, 2014</p> <p>The difference will produce: 12 months, 3 days.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload