Java里面年月日相减,JAVA中怎么得到两个日期相减的月数?

Java codeimport java.text.SimpleDateFormat;

import java.util.Calendar;

public class Test {

public static void main(String[] args) throws Exception {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

long time1 = sdf.parse("2012-01-12").getTime();

long time2 = sdf.parse("2010-02-11").getTime();

System.out.println(getFieldDifference(time1, time2, Calendar.YEAR));

System.out.println(getFieldDifference(time1, time2, Calendar.MONTH));

System.out.println(getFieldDifference(time1, time2, Calendar.DATE));

}

/**

* 区分两个日期之间指定字段的差值

*

* @param time1

* 开始时间

* @param time2

* 结束时间

* @param field

* 要比较的字段(年,月,日,...)

* @return 如果time1>time2就反回一个正的差值,如果time1

*/

public static int getFieldDifference(long time1, long time2, int field) {

if (time1 == time2) {

return 0;

} else if (time1 > time2) {

return -getFieldDifference(time2, time1, field);

}

Calendar cal1 = Calendar.getInstance();

cal1.setLenient(false);

cal1.setTimeInMillis(time1);

Calendar cal2 = Calendar.getInstance();

cal2.setLenient(false);

cal2.setTimeInMillis(time2);

for (int x = 0; x < Calendar.FIELD_COUNT; x++) {

if (x > field) {

cal1.clear(x);

cal2.clear(x);

}

}

time1 = cal1.getTimeInMillis();

time2 = cal2.getTimeInMillis();

long ms = 0;

int min = 0, max = 1;

while (true) {

cal1.setTimeInMillis(time1);

cal1.add(field, max);

ms = cal1.getTimeInMillis();

if (ms == time2) {

min = max;

break;

} else if (ms > time2) {

break;

} else {

max <<= 1;

}

}

while (max > min) {

cal1.setTimeInMillis(time1);

int t = (min + max) >>> 1;

cal1.add(field, t);

ms = cal1.getTimeInMillis();

if (ms == time2) {

min = t;

break;

} else if (ms > time2) {

max = t;

} else {

min = t;

}

}

return -min;

}

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值