1275: 男神的逆袭
题目
计算两个日期相差的天数。更多内容点击标题。
分析
下面说一下我的思路(自己写的,无扩展性):
- 给定一个日期,首先计算这个日期是这一年的第多少天。
- 给定两个日期,直接比较年份即可,闰年相差366天,平年相差365天,计算出相差的天数。
- 然后将两个日期在第一步中算的天数相减。
- 将2中和3中得到的天数相加即为结果。
CSDN上计算日期差的博客有很多,我试了几个都没成功(可能是我写错了,大家可以尝试一下)。个人觉得我的方法比较笨,EMMM,就当练练基础吧(自我安慰QAQ),基础不太好的也可以试试。
代码
/**
* 用时:1640ms
* @author PengHao
* @version A6.1
* @date 2019年4月20日 上午10:15:06
*/
import java.util.Scanner;
public class Main {
private Scanner sc;
private int t, y1, m1, d1, y2, m2, d2; // 输入的数据
public Main() {
sc = new Scanner(System.in);
Date date1, date2;
t = sc.nextInt();
while ((t--) > 0) {
input();
date1 = new Date(y1, m1, d1);
date2 = new Date(y2, m2, d2);
System.out.println(Date.daysBetweenYears(date1, date2));
}
sc.close();
}
/**
* 输入
*/
private void input() {
y1 = sc.nextInt();
m1 = sc.nextInt();
d1 = sc.nextInt();
y2 = sc.nextInt();
m2 = sc.nextInt();
d2 = sc.nextInt();
}
public static void main(String[] args) {
new Main();
}
}
/**
* 日期类
*
* @author PengHao
* @version A2.0
* @date 2019年4月20日 上午10:41:43
*/
class Date {
/**
* @Field daysOfYear 当前日期是这一年的第多少天
*/
private int year, month, day, daysOfYear;
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
daysOfYear = daysOfYear();
}
/**
* @return 当前日期在这一年的第多少天
*/
private int daysOfYear() {
int days = day; // 当月的天数
// 月份天数表
int[] daysOfMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 闰年加1天
if (0 == year % 4 && 0 != year % 100 || 0 == year % 400) {
daysOfMonth[1]++;
}
// 前面month-1个月的天数
for (int i = 0; i < month - 1; i++) {
days += daysOfMonth[i];
}
return days;
}
/**
* @param d1 第一个日期
* @param d2 第二个日期
* @return 相差天数
*/
public static int daysBetweenYears(Date d1, Date d2) {
// 同一年,直接返回当年天数的差即可
if (d1.year == d2.year) {
return Math.abs(d1.daysOfYear - d2.daysOfYear);
} else if (d1.year > d2.year) {
// 保证d1的年份小于d2的年份
Date temp = d1;
d1 = d2;
d2 = temp;
}
int days = 0;
for (int i = d1.year; i < d2.year; i++) {
if (0 == i % 4 && 0 != i % 100 || 0 == i % 400) {
days += 366; // 闰年加366
} else {
days += 365; // 平年加365
}
}
days += d2.daysOfYear - d1.daysOfYear;
return days;
}
}
写在最后:
- 如需转载,请于标题下注明链接形式的wowpH的博客即可;
- 代码原创,如需公开引用,不能删除首行注释(作者,版本号,时间等信息)。