两个日期相减

在项目中经常遇到日期相减的业务,一下是几种日期想减的代码集合,希望对各位有帮助!
1.SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date= myFormatter.parse("2003-05-1");
java.util.Date mydate= myFormatter.parse("1899-12-30");
long day=(date.getTime()-mydate.getTime())/(24*60*60*1000);


2. public int daysOfTwoDate(Date beginDate,Date endDate){
int days = 0;//两个日期之前的天数
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Calendar beginCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();

beginCalendar.setTime(beginDate);
endCalendar.setTime(endDate);
//计算天数
while(beginCalendar.before(endCalendar)){
days++;
beginCalendar.add(Calendar.DAY_OF_MONTH, 1);
}
return days;


3.
import java.util.*;
import java.text.*;
public class TestTime{
static int day=0;
static long d=0,l=0;
public static void main(String [] args){
long day=0;
TestTime a=new TestTime();
try{
day=(int)a.getCompareDate();

}catch(Exception se){
se.printStackTrace();
}
int ten=(int)day/10;
int gen=(int)day%10;

System.out.println(gen+"aa"+ten+"bb"+day);

}
public static long getCompareDate(){
Calendar cal = Calendar.getInstance();
//当前年月日
int year=cal.get(Calendar.YEAR);
int month=cal.get(Calendar.MONTH);
int date=cal.get(Calendar.DATE);
//System.out.println("年"+year+"月"+month+"日"+date);

cal.set(year, month, date);
Date date1=cal.getTime();
cal.set(2008,Calendar.AUGUST,8);
Date date2=cal.getTime();
l=(date2.getTime()-date1.getTime())/(24*60*60*1000);
return l;
}
}

4.
import java.util.Scanner;

public class TestDayNum {

private int startYear;
private int startMonth;
private int startDay;

private int endYear;
private int endMonth;
private int endDay;


private int outputStartYear; //保存输入结果,供输出时使用
private int outputStartMonth;
private int outputStartDay;

private int outputEndYear;
private int outputEndMonth;
private int outputEndDay;

private int dayNum;

private int tempYear;
private int tempMonth;
private int tempDay;

Scanner scanner = new Scanner(System.in);

public TestDayNum(){
System.out.println("请输入起始日期: ");
System.out.print("年: ");
startYear = scanner.nextInt();
outputStartYear = startYear;//输出时使用

System.out.print("月: ");
startMonth = scanner.nextInt();
outputStartMonth = startMonth;

System.out.print("日: ");
startDay = scanner.nextInt();
outputStartDay = startDay;

System.out.println("请输入结束日期: ");
System.out.print("年: ");
endYear = scanner.nextInt();
outputEndYear = endYear;

System.out.print("月: ");
endMonth = scanner.nextInt();
outputEndMonth = endMonth;

System.out.print("日: ");
endDay = scanner.nextInt();
outputEndDay = endDay;
}

private void countDayNum() {

if(this.startYear > this.endYear) {//起始年大于结束年,全部信息交换
this.tempYear = this.endYear;
this.endYear = this.startYear;
this.startYear = this.tempYear;

this.tempMonth = this.endMonth;
this.endMonth = this.startMonth;
this.startMonth = this.tempMonth;

this.tempDay = this.endDay;
this.endDay = this.startDay;
this.startDay = this.tempDay;
}

if(this.endYear == this.startYear){//若年相等

if(this.endMonth < this.startMonth) {//起始月大于结束月,信息转换
this.tempMonth = this.endMonth;
this.endMonth = this.startMonth;
this.startMonth = this.tempMonth;

this.tempDay = this.endDay;
this.endDay = this.startDay;
this.startDay = this.tempDay;
}

if(this.endMonth == this.startMonth){//若月相等
this.dayNum = Math.abs(this.endDay - this.startDay);//结果
}else {//年相等,月正确
/*先算出两个月份中间的月份有多少天*/
for(int i = this.startMonth + 1; i <= this.endMonth - 1; i++) {
this.dayNum += monthDayNum(i, this.startYear);
}

/*判断起始月的天数*/
int startMonthDayNum = monthDayNum(this.startMonth, this.startYear);
//加上起始月还剩下的天数
this.dayNum += startMonthDayNum - this.startDay + 1;
//加上结束月已经过了的天数
this.dayNum += this.endDay - 1;
}
}else {//年正确
/*算出年之间的天数*/
for(int i = this.startYear + 1; i <= this.endYear - 1; i++) {
if(isLeapyear(i)) {//如果是闰年
this.dayNum += 366;
}else{
this.dayNum += 365;
}
}

/*起始月距离该年结束的天数*/
for(int i = this.startMonth + 1; i <= 12; i++) {
this.dayNum += monthDayNum(i, this.startYear);
}

//判断起始月的天数
int startMonthDayNum = monthDayNum(this.startMonth, this.startYear);
//加上起始月还剩下的天数
this.dayNum += startMonthDayNum - this.startDay + 1;

/*结束月距离年初的天数*/
for(int i = 1; i <= this.endMonth - 1; i++) {
this.dayNum += monthDayNum(i, this.endYear);
}

//加上结束月已经过了的天数
this.dayNum += this.endDay - 1;
}

System.out.println(this.outputStartYear + "年" + this.outputStartMonth + "月"
+ this.outputStartDay + "日\n距离\n" + this.outputEndYear + "年"
+ this.outputEndMonth + "月" + this.outputEndDay + "日\n有\n"
+ this.dayNum + "天");
}

/**
* 计算是否是闰年
* @param year
* @return
*/
private boolean isLeapyear(int year)
{
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
return true;
}
return false;
}

/**
* 计算月份间的天数
*/
private int monthDayNum(int tempMonth, int tempYear) {
int dayNum = 0;

switch (tempMonth){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: dayNum += 31;
break;
case 4:
case 6:
case 9:
case 11: dayNum += 30;
break;
case 2: if(isLeapyear(tempYear)){
dayNum += 29;
}else{
dayNum += 28;
}
break;
default: break;
}

return dayNum;
}

/**
* @param args
*/
public static void main(String[] args) {
TestDayNum tdn = new TestDayNum();
tdn.countDayNum();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值