JAVA基础------实现日期差值的计算
自己写了一个计算日期差值的小功能
考虑到闰年及非闰年
传入格式为”YYYY-MM-DD”或”YYYY-M-D”的字符串即可,没有实现对传入参数非日期格式或数据的检查。
date1参数为当前时间
date2参数为设定时间
class cDate {
public String calculatingDateDifference(String date1, String date2) { // date1 当前时间 date2 设定时间
String[] a = date1.split("-");
String[] b = date2.split("-");
int month1 = Integer.parseInt(a[1].trim());
int month2 = Integer.parseInt(b[1].trim());
int dofm1 = Integer.parseInt(a[2].trim()); // day of month
int dofm2 = Integer.parseInt(b[2].trim());
int year1 = Integer.parseInt(a[0]);
int year2 = Integer.parseInt(b[0]);
int day1 = calculatingDays(year1, month1, dofm1); // day of year
int day2 = calculatingDays(year2, month2, dofm2);
System.out.println("date1:"+ date1 +" month1:" + month1 + " dofm1:" + dofm1 + " year1:" + year1 + " day1:" + day1);
System.out.println("date2:"+ date2 +" month2:" + month2 + " dofm2:" + dofm2 + " year2:" + year2 + " day2:" + day2);
if (year1 != year2) //不同年
{
if (year1 > year2) {
if (month1 == month2 && dofm1 == dofm2) {
return year1 - year2 + "年前的今天";
} else {
int timeDistance = 0;
for (int i = year2; i < year1; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) //闰年
{
timeDistance += 366;
} else //不是闰年
{
timeDistance += 365;
}
}
return "距今已过去" + (timeDistance + (day1 - day2)) + "天"; // 把年累加到相同(计算一年天数*年数) + 一年中两天的差值
}
} else if (year2 > year1) {
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;
}
}
if (month1 == month2 && dofm1 == dofm2) {
return year2 - year1 + "年后的今天,还有" + (timeDistance + day2 - day1) + "天";
}
return "距离设定时间还有" + (timeDistance + day2 - day1) + "天";
}
} else { //同一年
if (day1 > day2) {
return "已经过去" + (day1 - day2) + "天";
} else if (day1 == day2) {
return "就是今天";
} else {
return "还有" + (day2 - day1) + "天";
}
}
return "我已经被判断日期绕晕了";
}
public int calculatingDays(int y, int m, int d) { // 返回day of year
m = m-1;
int dayOfYear = 0;
switch (m) { // 利用case选择 累加
case 11:
dayOfYear = dayOfYear + 30;
case 10:
dayOfYear += 31;
case 9:
dayOfYear += 30;
case 8:
dayOfYear += 31;
case 7:
dayOfYear += 31;
case 6:
dayOfYear += 30;
case 5:
dayOfYear += 31;
case 4:
dayOfYear += 30;
case 3:
dayOfYear += 31;
case 2:
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) //闰年
{
dayOfYear += 29;
} else { // 不是闰年
dayOfYear += 28;
}
case 1:
dayOfYear += 31;
case 0:
dayOfYear += 0;
}
return dayOfYear + d;
}
}
public class Test {
public static void main(String[]agrs)
{
cDate cdate = new cDate();
System.out.println(cdate.calculatingDateDifference("2017-12-1", "2018-1-1")); // 填入测试数据
System.out.println("HelloWorld!");
}
}
若发现代码有错误的地方或是有更好实现方法的,欢迎讨论及分享,谢谢。
还没有评论,来说两句吧...