Java 期间。仅在减去天数之间

Java 期间。仅在减去天数之间,java,datetime-format,java-time,period,Java,Datetime Format,Java Time,Period,变量dateSubtract的结果是16,但我想找出两天之间的总天数,应该是165。没有乔达时间,我怎么做 String date = "06/17/2014"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy"); LocalDate d1 = LocalDate.parse("01/01/2014", formatter); LocalDate d2 = LocalDate.parse(date, f

变量
dateSubtract
的结果是16,但我想找出两天之间的总天数,应该是165。没有乔达时间,我怎么做

String date = "06/17/2014";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate d1 = LocalDate.parse("01/01/2014", formatter);
LocalDate d2 = LocalDate.parse(date, formatter);
int dateSubtract = Period.between(d1, d2).getDays();

期间
是日、月、年的组合。所以在你的例子中,期限是5个月16天。javadoc中对此进行了解释,但如果您随意阅读,则不一定非常清楚

天数单位不会自动与月份和年份单位标准化。这意味着“45天”与“1个月15天”不同,
getDays()
将分别返回45天和15天

要获取两个日期之间的总天数,可以使用:

//including d1, excluding d2:
ChronoUnit.DAYS.between(d1, d2);
//or, to exclude d1 AND d2, one of these:
ChronoUnit.DAYS.between(d1.plusDays(1), d2);
ChronoUnit.DAYS.between(d1, d2) - 1;
没有JODA时间:

SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Date dateStart = null;
Date dateEnd = null;

try {
    dateStart = format.parse("01/01/2014");
    dateEnd = format.parse("06/17/2014");

    long diffTime = dateEnd.getTime() - dateStart.getTime();

    long diffDays = diffTime / (24 * 60 * 60 * 1000);

} catch (Exception e) {
    e.printStackTrace();
}

周期以年、月和日为单位对时间的数量或数量进行建模, 例如
2年、3个月和4天

要计算两个日期之间的天数,请使用


请检查此链接是否可以帮助您??[链接]@RakeshBurbure好吧,这个链接要么意味着使用Joda时间,要么使用Java-8之前的日期计算。这假设了一个行为良好的时区。我也这样做了,我得到了166天,JodaTime是我唯一能让你165@user2007843“从2014年1月1日到2014年6月17日之间不应该是167天吗?”Thomas well说,这是开始和结束日期,我不想这么说do@user2007843我也没有计算结束日期,也就是第168天(167整天,即01/01/14 00:00:00到06/17/14 00:00:00)所以,如果不算1月1日,应该还是166天,不是吗?我没有使用Java 1.8,所以现在不支持
ChronoUnit
。hmmm@user2007843AFAIK
LocalDate
Period
等仅由Java 8提供,因此您使用的是Java 8或其他库,这将使帮助变得更加困难,不知道是哪一个。我显然安装了Java8,我可以导入
Java.time.LocalDate
Java.time.Period
,但它没有work@user2007843
import java.time.temporal.ChronoUnit。好的,是的,我只是这么做了,我想当我输入它时,它不会自动添加它。谢谢
long days = ChronoUnit.DAYS.between(LocalDate.of(2020,4,1), LocalDate.now());