3.2.课设实验-Java核心技术-日期
一.题目比较日期编写一个Java应用程序用户输入两个日期程序将判断两个日期的大小关系以及两个日期之间的间隔天数。二.参考代码package Practice2; import java.util.Calendar; import java.util.Date; import java.util.Scanner; public class CompareDate { static Scanner scan new Scanner(System.in); public static void main(String[] args) { //1.创建日历对象 Calendar calendarOneinput(1); Calendar calendarTwoinput(2); //2.将日历时间转换为毫秒 long timeOne calendarOne.getTimeInMillis(); long timeTwo calendarTwo.getTimeInMillis(); //3.计算这两个日历时间相隔天数 long result Math.abs(timeOne-timeTwo); long daysresult/1000L/60/60/24; //4.创建Date对象来操作日历 Date date1new Date(timeOne); Date date2new Date(timeTwo); //5.比较 if(date2.equals(date1)) System.out.println(两个日期的年、月、日完全相同); else if(date2.after(date1)) System.out.println(您输入的第二个日期大于第一个日期); else if(date2.before(date1)) System.out.println(您输入的第二个日期小于第一个日期); //6.输出 System.out.println(date1和date2相隔days天); } //录入数据的方法 private static Calendar input(int number){ //1.输入年、月、日 System.out.println(输入第number个年月日数据); System.out.print(输入年份); short year scan.nextShort(); System.out.print(输入月份); byte month scan.nextByte(); System.out.print(输入日期); byte day scan.nextByte(); //2.初始化日历对象并设置对应时间 Calendar calendarCalendar.getInstance(); calendar.set(year,month-1,day); //3.返回日历 return calendar; } }上述代码输入两个日期分别为2026年3月8日和2026年3月1日输出结果中却是相隔6天而不是7天理由如下这是 Java 中Calendar类使用时一个很经典的新手陷阱下面来彻底分析清楚原因并修复代码。问题根源代码计算结果是 6 天而不是 7 天核心原因是Calendar.getInstance()创建的日历对象不仅包含年月日还包含当前的时分秒毫秒。当你执行calendar.set(year,month-1,day)时只会修改年月日时分秒毫秒会保留当前系统时间。举个例子你输入第一个日期 2026-03-08程序实际存储的是2026-03-08 15:30:25.123假设当前系统时间你输入第二个日期 2026-03-01程序实际存储的是2026-03-01 15:30:25.124两者相减的毫秒数是6*24*3600*1000 1除以1000*60*60*24后取整就是 6 天因为整数除法会舍去小数部分。修复后的完整代码package Practice2; import java.util.Calendar; import java.util.Date; import java.util.Scanner; public class CompareDate { static Scanner scan new Scanner(System.in); public static void main(String[] args) { //1.创建日历对象 Calendar calendarOneinput(1); Calendar calendarTwoinput(2); //2.将日历时间转换为毫秒 long timeOne calendarOne.getTimeInMillis(); long timeTwo calendarTwo.getTimeInMillis(); //3.计算这两个日历时间相隔天数 long result Math.abs(timeOne-timeTwo); long days result / (1000L * 60 * 60 * 24); /*1000L * 60 * 60 * 24是一天共有多少秒*/ //4.创建Date对象来操作日历 Date date1new Date(timeOne); Date date2new Date(timeTwo); //5.比较 if(date2.equals(date1)) System.out.println(两个日期的年、月、日完全相同); else if(date2.after(date1)) System.out.println(您输入的第二个日期大于第一个日期); else if(date2.before(date1)) System.out.println(您输入的第二个日期小于第一个日期); //6.输出 System.out.println(date1和date2相隔days天); } //录入数据的方法 private static Calendar input(int number){ //1.输入年、月、日 System.out.println(输入第number个年月日数据); System.out.print(输入年份); short year scan.nextShort(); System.out.print(输入月份); byte month scan.nextByte(); System.out.print(输入日期); byte day scan.nextByte(); //2.初始化日历对象并设置对应时间 Calendar calendarCalendar.getInstance(); calendar.set(year,month-1,day,0,0,0); calendar.set(Calendar.MILLISECOND, 0); // 清空毫秒 //3.返回日历 return calendar; } }关键修改点解释原代码问题行calendar.set(year,month-1,day);只设置了年月日时分秒保留系统当前值。修复后代码calendar.set(year, month - 1, day, 0, 0, 0); // 设置年月日时分秒为0 calendar.set(Calendar.MILLISECOND, 0); // 额外清空毫秒值这样两个日期都会被统一设置为当天 00:00:00.000相减后的毫秒数就是完整的天数差计算结果就准确了。测试验证输入输入第1个年月日数据 输入年份2026 输入月份3 输入日期8 输入第2个年月日数据 输入年份2026 输入月份3 输入日期1输出您输入的第二个日期小于第一个日期 Sun Mar 08 00:00:00 GMT08:00 2026和Sun Mar 01 00:00:00 GMT08:00 2026相隔7天总结Calendar.getInstance()创建的对象包含完整的时间信息年月日时分秒毫秒仅设置年月日会保留当前时分秒。计算日期相隔天数时必须将两个日期的时分秒毫秒统一置为 0否则会因时间差导致天数计算错误。修复核心是使用calendar.set(year, month-1, day, 0, 0, 0)和set(Calendar.MILLISECOND, 0)清空时间部分。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2423400.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!