软构lab3
知道开始和结束日期的年月日,求持续天数
- getTimeInMillis()将其转化成long,表示从格林威治标准时间 1970 年 1 月 1 日的
00:00:00.000到Calendar对象表示的时间之间的毫秒数
import java.util.Calendar;
public class Try {
public static void main(String[] args) {
Calendar startdate = Calendar.getInstance();
Calendar enddate = Calendar.getInstance();
//设置时间
startdate.set(2021,6,30);
enddate.set(2021,7,2);
//getTimeInMills()函数
long dura = enddate.getTimeInMillis() - startdate.getTimeInMillis();
//输出检查
System.out.println(startdate.get(Calendar.YEAR)+"-"+startdate.get(Calendar.MONTH)+"-"+startdate.get(Calendar.DATE));
System.out.println(enddate.get(Calendar.YEAR)+"-"+enddate.get(Calendar.MONTH)+"-"+enddate.get(Calendar.DATE));
//得到毫秒数
System.out.println(dura);
//得到天数
System.out.println(dura/1000/60/60/24);
}
}
以上方法十分离谱,快跑!!!
2021-6-1到2021-6-5得到的时间是4
但是!2021-6-30到2021-7-1得到的时间却是1
如果涉及到月转换,就别用这个方法
看了一番突然发现了问题所在:
java里的Calendar不检查月份天数,它默认每个月都是31天。
public static String nyr(Calendar a) {
String mystr = a.get(Calendar.YEAR)+"-"+a.get(Calendar.MONTH)+"-"+a.get(Calendar.DATE);
return mystr;
}
public static void main(String[] args) {
Calendar a = Calendar.getInstance();
a.set(2021,2,28);
System.out.println(nyr(a));
a.add(Calendar.DATE, 1);
System.out.println(nyr(a));
a.add(Calendar.DATE, 1);
System.out.println(nyr(a));
a.add(Calendar.DATE, 1);
System.out.println(nyr(a));
a.add(Calendar.DATE, 1);
System.out.println(nyr(a));
}
输出如下:
???谁家2月有30号啊!!!!
再见Calendar,我用Date去了
新方法如下:
package test;
//注意:引进的包是sql里的
import java.sql.Date;
import java.util.Calendar;
public class Try {
//给日期加n天
public static Date add_days(Date a,long day) {
Calendar temp = Calendar.getInstance();
temp.setTime(a);
temp.set(Calendar.DATE, temp.get(Calendar.DATE)+(int)day);
Date mydate = new Date(temp.get(Calendar.YEAR)-1900,temp.get(Calendar.MONTH),temp.get(Calendar.DATE));
return mydate;
}
//计算两个日期之间的持续天数
public static long getDuration(Date early,Date late) {
//不必考虑日期的先后顺序,加个绝对值
long myDura = Math.abs(early.getTime() - late.getTime())/(1000*60*60*24);
return myDura;
}
public static void main(String[] args) {
//奇妙的赋值方式
//年份-1900,月份-1,日正常
Date a = new Date(2021-1900,2-1,28);
System.out.println( a.toString());
System.out.println("---------测试:加方法是否跨月份----------");
//注意:Date是mutable的
a = add_days(a, 1);
System.out.println( a.toString());
a = add_days(a, 1);
System.out.println( a.toString());
a = add_days(a, 1);
System.out.println( a.toString());
System.out.println("---------测试:两个日期之间的持续天数----------");
Date b = new Date(2021-1900,6-1,1);
Date c = new Date(2021-1900,6-1,5);
Date d = new Date(2021-1900,7-1,1);
System.out.println("2021-6-1 到 2021-6-5 间隔 "+getDuration(b, c)+" 天");
System.out.println("2021-6-1 到 2021-7-1 间隔 "+getDuration(d, b)+" 天");
}
nice