【发布时间】:2014-07-23 04:54:55
【问题描述】:
我编写了下面的代码,它将给出两个日期之间的差异,结果将以年、月和日为单位。
对我来说这是很好的代码,但问题在于几个月,因为它固定为 30 天
所以如果我减去 (2014 年 2 月 1 日)-(2014 年 1 月 1 日) 应该是一个月 但是用我的代码它将是 1个月 1天
import java.util.*;
public class Main
{
public static void main(String[] args)
{
int y_d = 365;
int m_d = 30;
Scanner scn = new Scanner(System.in);
System.out.println("Enter your first date: ");
System.out.print("Day : ");
int day1 = scn.nextInt();
System.out.print("Month : ");
int month1 = scn.nextInt();
System.out.print("Year : ");
int year1 = scn.nextInt();
Calendar cal1 = Calendar.getInstance();
cal1.set(year1,month1-1,day1);
System.out.println();
System.out.println("Enter your second date: ");
System.out.print("Day : ");
int day2 = scn.nextInt();
System.out.print("Month : ");
int month2 = scn.nextInt();
System.out.print("Year : ");
int year2 = scn.nextInt();
Calendar cal2 = Calendar.getInstance();
cal2.set(year2,month2-1,day2);
long milis1 = cal1.getTimeInMillis();
long milis2 = cal2.getTimeInMillis();
long day = milis2 - milis1;
long days = day / (24*60*60*1000);
System.out.println();
System.out.println("The difference : " + days + " days");
long y_r = (days % y_d);
long m_r = (y_r % m_d);
System.out.println("The result is approximatly");
System.out.println(days/y_d + " year(s)");
System.out.println(y_r/m_d + " month(s)");
System.out.println(m_r + " day(s)");
}
}
我可以不使用 joda time 来解决这个问题吗???
【问题讨论】:
-
很遗憾,Date/Calendar 没有间隔的概念,而且看起来做得好会很痛苦。如果你使用 Java 8,你可以考虑使用新的 time api。与 SO 相关(包括许多无法解决您问题的错误答案):stackoverflow.com/…