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;
}
}
java计算两月份之差 java两个日期相减计算月份
原创
©著作权归作者所有:来自51CTO博客作者架构领航员的原创作品,请联系作者获取转载授权,否则将追究法律责任
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
JAVA 两个类同时实现同一个接口
JAVA 两个类同时实现同一个接口
System 默认方法 静态方法 -
java pom两个模块需要互相引用怎么办
java pom两个模块需要互相引用怎么办
xml ci 多模块 -
java两个日期做减法 java两个日期相减计算月份
1. date类型时间相减:date日期格式利用getTime()方法返回两个时间的毫秒数,然后相减
Java date 时间相减 天数加减 年份加减 月份加减