计蒜客-T1175计算两个日期之间的天数(Java版本)

题目

https://vjudge.net/problem/%E8%AE%A1%E8%92%9C%E5%AE%A2-T1175

思路

 *      方法一:
 *      通过Calendar类的日期比较
 *          1,日期是跨年份的
 *          2,年份有闰年和平年
 *      思路:
 *          1,通过SimpleDateFormat初始化时间时刻
 *          2,Date对象的方法大多过时,我们用Calendar类来计算
 *          3,Calendar中的get方法可以获取各个字段的值,例如:DAY_OF_YEAR 一年里当前年时刻的天数
 *          4,计算两个年份之间相差多少年
 *          5,判断平年还是闰年 平年加366天  闰年加365*          6,年份的天数加上当前年时刻天数的差得到结果。
 *
 *      方法二:
 *      Date类的gettime方法返回当前对象一个long值 (单位毫秒)
 *      思路:
 *          1,分别计算两个对象的long值。
 *          2,再用long值想减。
 *          3,用相减的毫秒换算成天数。
 

代码

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.StringTokenizer;

public class Main {

	/**
	 * @param args
	 * @throws Exception
	 * 
	 */
	public static void main(String[] args) throws Exception {
		int startYear = _03Reader.nextInt();
		int startMonth = _03Reader.nextInt();
		int startDay = _03Reader.nextInt();
		int endYear = _03Reader.nextInt();
		int endMonth = _03Reader.nextInt();
		int endDay = _03Reader.nextInt();

		String dateStr1 = startYear + "-" + startMonth + "-" + startDay;
		String dateStr2 = endYear + "-" + endMonth + "-" + endDay;
		SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Date date1 = format1.parse(dateStr1);
			Date date2 = format2.parse(dateStr2);

			System.out.println(differentDays(date1, date2));
			//System.out.println(differentDayMillisecond(date1, date2));
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

	private static int differentDayMillisecond(Date date1, Date date2) {

		int day = (int) ((date2.getTime() - date1.getTime()) / (3600 * 1000 * 24));
		return day;
	}

	private static int differentDays(Date date1, Date date2) {
		Calendar calendar1 = Calendar.getInstance();
		calendar1.setTime(date1);
		Calendar calendar2 = Calendar.getInstance();
		calendar2.setTime(date2);

		int day1 = calendar1.get(Calendar.DAY_OF_YEAR);
		// System.out.println(day1);
		int day2 = calendar2.get(Calendar.DAY_OF_YEAR);
		// System.out.println(day2);
		int year1 = calendar1.get(Calendar.YEAR);
		int year2 = calendar2.get(Calendar.YEAR);

		if (year1 != year2) // 不同年
		{
			int timeDistance = 0;
			for (int i = year1; i < year2; i++) { // 闰年
				if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
					timeDistance += 366;
				} else { // 不是闰年
					timeDistance += 365;
				}
			}
			return timeDistance + (day2 - day1);
		} else {// 同年
			return day2 - day1;
		}
	}

}

class _03Reader {
	static BufferedReader br = new BufferedReader(new InputStreamReader(
			System.in));
	static StringTokenizer tokenizer = new StringTokenizer("");

	static String next() throws Exception {
		while (!tokenizer.hasMoreTokens()) {
			tokenizer = new StringTokenizer(br.readLine());
		}
		return tokenizer.nextToken();
	}

	static String nextLine() throws Exception {
		return br.readLine();
	}

	static int nextInt() throws Exception {
		return Integer.parseInt(next());
	}

}

说明

代码提交上去是有错的,第一种方法differentDays能通过27组测试用例(一共30组),第二种方法differentDayMillisecond能通过11组测试用例,不晓得哪里出了问题,我已经没招了

拓展

Java计算时间差、日期差总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值