- import java.util.Calendar;
- public class Y {
- public static void main(String[] args) {
- int ret[] = getDateLength( "20050531 ", "20070101 ");
- System.out.println(ret[0] + ": " + ret[1] + ": " + ret[2]);
- }
- static int[] getDateLength(String fromDate, String toDate) {
- Calendar c1 = getCal(fromDate);
- Calendar c2 = getCal(toDate);
- int[] p1 = { c1.get(Calendar.YEAR), c1.get(Calendar.MONTH), c1.get(Calendar.DAY_OF_MONTH) };
- int[] p2 = { c2.get(Calendar.YEAR), c2.get(Calendar.MONTH), c2.get(Calendar.DAY_OF_MONTH) };
- return new int[] { p2[0] - p1[0], p2[0] * 12 + p2[1] - p1[0] * 12 - p1[1], (int) ((c2.getTimeInMillis() - c1.getTimeInMillis()) / (24 * 3600 * 1000)) };
- }
- static Calendar getCal(String date) {
- Calendar cal = Calendar.getInstance();
- cal.clear();
- cal.set(Integer.parseInt(date.substring(0, 4)), Integer.parseInt(date.substring(4, 6)) - 1, Integer.parseInt(date.substring(6, 8)));
- return cal;
- }
- }
计算年的差值和天的差值比较简单。
关键是月的差值,可以用等价的概念把年退到月,比如2007年1月,等价于2006年13月,同理等价于0年(2007*12+1)月。
这样y1年m1月到y2年m2月 分别等价于0年(y1*12+m1)月和0年(y2*12-m2)月
月份之差就是:y2*12+m2-y1*12-m1