java判断两个日期相差时长_Java计算两个日期相差多少天

/*

* 从键盘输入一个日期,格式为yyyy-M-d

要求计算该日期与1949年10月1日距离多少天

例如:

用户输入了:1949-10-2

程序输出:1

用户输入了:1949-11-1

程序输出:31

*/

import java.util.Arrays;

import java.util.Scanner;

public class Demo09 {

static int[][] days = { // 定义平年days[0]和闰年days[1]

{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}};

// 字符串转换 整数

public static int[] conversion(String s) {

String[] ss = s.split("\\-");

int[] t = new int[3];

t[0] = Integer.parseInt(ss[0]);

t[1] = Integer.parseInt(ss[1]);

t[2] = Integer.parseInt(ss[2]);

return t;

}

// 计算任意一年内的总天数 (是365还是366)

public static int calcDay(int y,int m,int d){

int sum = d; // 每一年的总天数 (初始化为最后一个月的天数)

int i = 0; // 平年下标为 0

if((y%4==0&&y%100!=0)||(y%400==0)) i = 1; // 闰年下标为 1

for(int j=0;j

sum += days[i][j];

}

return sum;

}

// 判断是否交换输入的两个日期 (日期小者放前)

public static void isSwap(int[] o,int[] n){

if(o[0]>n[0]){ // 日期内容交换

for(int i=0;i

int t = o[i];

o[i] = n[i];

n[i] = t;

}

}

}

// 输出

public static String p(int[] s){

StringBuffer sb = new StringBuffer();

for(int i=0;i

sb.append(s[i]+"-");

}

sb.append(s[s.length-1]);

return sb.toString();

}

// 计算总天数

public static int calc(int[] o, int[] n) {

int sum;

if(n[0]==o[0]){ // 如果年份相等,侧直接计算天数

sum = calcDay(n[0],n[1],n[2])-calcDay(o[0],o[1],o[2]); // 大的日期天数-小的日期天数

}else{

sum = calcDay(o[0],12,31)-calcDay(o[0],o[1],o[2]); // 得到第一年日期到下一年开始的天数

for(int i=o[0]+1;i

sum += calcDay(i,12,31);

}

sum += calcDay(n[0],n[1],n[2]); // 加上最后一年的天数

}

return sum;

}

public static void main(String[] args){

// int[] o = conversion("1949-10-2");

Scanner scan = new Scanner(System.in);

System.out.print("输入日期格式为:(1949-10-2)\n输入第一个日期:");

int[] o = conversion(scan.nextLine());

System.out.print("输入第二个日期:");

int[] n = conversion(scan.nextLine());

int sum = 0; // 总和

isSwap(o,n); // 如果o日期小于n日期,侧交换

sum = calc(o, n); // 计算总天数

System.out.println(p(o)+" 到 "+p(n)+"\n距离"+sum+"天");

}

}

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点!

本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值