Java 如何获得两个日期之间的月和日
很抱歉,我已尝试为剩余的日期Java 如何获得两个日期之间的月和日,java,date,elapsed,Java,Date,Elapsed,很抱歉,我已尝试为剩余的日期月数和天数编码,不幸的是,我得到了错误的结果。任何帮助都将不胜感激。谢谢 SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy"); String sdate = "08-02-2016"; String edate = "02-02-2017"; Date startdate = formatter.parse(sdate); Date enddate = formatte
月数
和天数
编码,不幸的是,我得到了错误的结果。任何帮助都将不胜感激。谢谢
SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy");
String sdate = "08-02-2016";
String edate = "02-02-2017";
Date startdate = formatter.parse(sdate);
Date enddate = formatter.parse(eddate );
Calendar startCalendar = new GregorianCalendar();
startCalendar.setTime(startdate);
Calendar endCalendar = new GregorianCalendar();
endCalendar.setTime(enddate);
int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); //effdate - currdate
int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) -startCalendar.get(Calendar.MONTH);
int diffDay= endCalendar.get(Calendar.DAY_OF_MONTH) -startCalendar.get(Calendar.DAY_OF_MONTH);
预期结果:11个月25天p/s:JodaTime不适用。我认为你不能直接获得像z天y小时x分钟 但你可以得到单独的日分每秒和如下所示-
long diff = EFFDAT.getTime() - CURRDATE.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000);
int diffInDays = (int) ((dt2.getTime() - dt1.getTime()) / (1000 * 60 * 60 * 24));
已更新
希望它能有所帮助-我想你需要Java8
LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);
Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() + " months, and " + p.getDays() + " days old. (" + p2 + " days total)");
我强烈建议您使用健壮的api以获得可靠的结果,但如果您坚持手动执行,请尝试以下操作,它似乎给出了正确的结果(至少对于您的测试用例):
您正在使用Java8吗?尝试用减法计算日期之间的差异从来都不是一个好主意,它没有考虑到日期/时间的特殊性,这就是JodaTime存在的原因…您只需要一些额外的逻辑来处理CURDATE的日期小于EFFDATE的日期的情况。是的,正如MadProgrammer所说,这在Java8中很容易——您可以使用
Period.between(…)
传递几个LocalDate
对象。你有Java8吗?@MadProgrammer,同意你的看法。因为使用减法不是一种好的做法。但是我的java版本<8,我无法将JodaTime应用到我的系统中。我可以知道做这件事的其他方法吗?可能是重复的和更多的。不!并非所有的日子都是24小时。这在大约25%的时间内都会失败——也就是说,只要日期范围在夏令时结束,而在冬季开始。你还没有回答关于获得月和日的问题。
SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy");
String CURRDATE = "08-02-2016";
String EFFDATE = "02-02-2017";
Date startdate = formatter.parse(CURRDATE);
Date enddate = formatter.parse(EFFDATE);
Calendar startCalendar = new GregorianCalendar();
startCalendar.setTime(startdate);
Calendar endCalendar = new GregorianCalendar();
endCalendar.setTime(enddate);
int monthCount = 0;
int firstDayInFirstMonth = startCalendar.get(Calendar.DAY_OF_MONTH);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
endCalendar.add(Calendar.DAY_OF_YEAR, -firstDayInFirstMonth+1);
while (!startCalendar.after(endCalendar)) {
startCalendar.add(Calendar.MONTH, 1);
++monthCount;
}
startCalendar.add(Calendar.MONTH, -1); --monthCount;
int remainingDays = 0;
while (!startCalendar.after(endCalendar)) {
startCalendar.add(Calendar.DAY_OF_YEAR, 1);
++remainingDays;
}
startCalendar.add(Calendar.DAY_OF_YEAR, -1);
--remainingDays;
int lastMonthMaxDays = endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
if (remainingDays >= lastMonthMaxDays) {
++monthCount;
remainingDays -= lastMonthMaxDays;
}
int diffMonth = monthCount;
int diffDay = remainingDays;
System.out.println("diffMonth==="+diffMonth +" Month(s) and " + diffDay + " Day(s)");