WUSTOJ 1275: 男神的逆袭(Java)

1275: 男神的逆袭

题目

  计算两个日期相差的天数。更多内容点击标题。

分析

  下面说一下我的思路(自己写的,无扩展性):

  1. 给定一个日期,首先计算这个日期是这一年的第多少天。
  2. 给定两个日期,直接比较年份即可,闰年相差366天,平年相差365天,计算出相差的天数。
  3. 然后将两个日期在第一步中算的天数相减。
  4. 将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;
	}

}

写在最后:

  1. 如需转载,请于标题下注明链接形式的wowpH的博客即可;
  2. 代码原创,如需公开引用,不能删除首行注释(作者,版本号,时间等信息)。

posted @ 2019-04-20 11:20  wowpH  阅读(172)  评论(0编辑  收藏  举报