JAVA基础------实现日期差值的计算

我就是我 2022-06-03 03:00 338阅读 0赞

自己写了一个计算日期差值的小功能

考虑到闰年及非闰年
传入格式为”YYYY-MM-DD”或”YYYY-M-D”的字符串即可,没有实现对传入参数非日期格式或数据的检查。

date1参数为当前时间
date2参数为设定时间

  1. class cDate {
  2. public String calculatingDateDifference(String date1, String date2) { // date1 当前时间 date2 设定时间
  3. String[] a = date1.split("-");
  4. String[] b = date2.split("-");
  5. int month1 = Integer.parseInt(a[1].trim());
  6. int month2 = Integer.parseInt(b[1].trim());
  7. int dofm1 = Integer.parseInt(a[2].trim()); // day of month
  8. int dofm2 = Integer.parseInt(b[2].trim());
  9. int year1 = Integer.parseInt(a[0]);
  10. int year2 = Integer.parseInt(b[0]);
  11. int day1 = calculatingDays(year1, month1, dofm1); // day of year
  12. int day2 = calculatingDays(year2, month2, dofm2);
  13. System.out.println("date1:"+ date1 +" month1:" + month1 + " dofm1:" + dofm1 + " year1:" + year1 + " day1:" + day1);
  14. System.out.println("date2:"+ date2 +" month2:" + month2 + " dofm2:" + dofm2 + " year2:" + year2 + " day2:" + day2);
  15. if (year1 != year2) //不同年
  16. {
  17. if (year1 > year2) {
  18. if (month1 == month2 && dofm1 == dofm2) {
  19. return year1 - year2 + "年前的今天";
  20. } else {
  21. int timeDistance = 0;
  22. for (int i = year2; i < year1; i++) {
  23. if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) //闰年
  24. {
  25. timeDistance += 366;
  26. } else //不是闰年
  27. {
  28. timeDistance += 365;
  29. }
  30. }
  31. return "距今已过去" + (timeDistance + (day1 - day2)) + "天"; // 把年累加到相同(计算一年天数*年数) + 一年中两天的差值
  32. }
  33. } else if (year2 > year1) {
  34. int timeDistance = 0;
  35. for (int i = year1; i < year2; i++) {
  36. if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) //闰年
  37. {
  38. timeDistance += 366;
  39. } else { // 不是闰年
  40. timeDistance += 365;
  41. }
  42. }
  43. if (month1 == month2 && dofm1 == dofm2) {
  44. return year2 - year1 + "年后的今天,还有" + (timeDistance + day2 - day1) + "天";
  45. }
  46. return "距离设定时间还有" + (timeDistance + day2 - day1) + "天";
  47. }
  48. } else { //同一年
  49. if (day1 > day2) {
  50. return "已经过去" + (day1 - day2) + "天";
  51. } else if (day1 == day2) {
  52. return "就是今天";
  53. } else {
  54. return "还有" + (day2 - day1) + "天";
  55. }
  56. }
  57. return "我已经被判断日期绕晕了";
  58. }
  59. public int calculatingDays(int y, int m, int d) { // 返回day of year
  60. m = m-1;
  61. int dayOfYear = 0;
  62. switch (m) { // 利用case选择 累加
  63. case 11:
  64. dayOfYear = dayOfYear + 30;
  65. case 10:
  66. dayOfYear += 31;
  67. case 9:
  68. dayOfYear += 30;
  69. case 8:
  70. dayOfYear += 31;
  71. case 7:
  72. dayOfYear += 31;
  73. case 6:
  74. dayOfYear += 30;
  75. case 5:
  76. dayOfYear += 31;
  77. case 4:
  78. dayOfYear += 30;
  79. case 3:
  80. dayOfYear += 31;
  81. case 2:
  82. if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) //闰年
  83. {
  84. dayOfYear += 29;
  85. } else { // 不是闰年
  86. dayOfYear += 28;
  87. }
  88. case 1:
  89. dayOfYear += 31;
  90. case 0:
  91. dayOfYear += 0;
  92. }
  93. return dayOfYear + d;
  94. }
  95. }
  96. public class Test {
  97. public static void main(String[]agrs)
  98. {
  99. cDate cdate = new cDate();
  100. System.out.println(cdate.calculatingDateDifference("2017-12-1", "2018-1-1")); // 填入测试数据
  101. System.out.println("HelloWorld!");
  102. }
  103. }

Exler

Exler


若发现代码有错误的地方或是有更好实现方法的,欢迎讨论及分享,谢谢。

发表评论

表情:
评论列表 (有 0 条评论,338人围观)

还没有评论,来说两句吧...

相关阅读

    相关 日期差值问题

    题目 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们 之间的天数为两天 输入 有多组数据,每组数据有两行,分别表示两个日

    相关 日期差值

    问题 : 日期差值 题目描述 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。  输入 有多组数据,每组数据有