zoukankan      html  css  js  c++  java
  • 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. 代码原创,如需公开引用,不能删除首行注释(作者,版本号,时间等信息)。

  • 相关阅读:
    《CUDA并行程序设计:GPU编程指南》
    《设计搜索体验:搜索的艺术与科学》
    《iOS应用逆向工程:分析与实战》
    《实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)》
    《完美幻灯片设计的黄金法则》
    《Haskell趣学指南》
    《全程软件测试(第2版)》
    【互动出版网】2013双12全场科技类图书6.5折封顶
    【互动出版网】新书五折限量抢——图书超低价
    c# (ENUM)枚举组合类型的谷歌序列化Protobuf
  • 原文地址:https://www.cnblogs.com/wowpH/p/11060817.html
Copyright © 2011-2022 走看看