【问题标题】:Period.between only subtracting daysPeriod.between 仅减去天数
【发布时间】:2014-06-18 15:12:23
【问题描述】:

变量dateSubtract 是 16,但我想找出这两天之间的总天数,应该是 165。没有 JODA TIME,我该怎么做?

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();

【问题讨论】:

标签: java datetime-format java-time period


【解决方案1】:

Period 是日、月、年的组合。因此,在您的情况下,期限为 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;

【讨论】:

  • 我没有使用 Java 1.8,所以现在不支持 ChronoUnit。嗯
  • @user2007843 AFAIK LocalDatePeriod 等仅由 Java 8 提供,因此您使用的是 Java 8 或其他库,这会在不知道的情况下增加帮助哪一个。
  • 我显然已经安装了 Java 8,我可以导入 java.time.LocalDatejava.time.Period 但 ChronoUnit 不起作用
  • @user2007843 import java.time.temporal.ChronoUnit;.
  • 好吧,是的,我只是这样做了,我猜当我输入 ChronoUnit 时它并没有自动添加它。谢谢
【解决方案2】:

没有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();
}

【讨论】:

  • 假设时区表现良好。
  • 我也这样做了,我得到了 166 天,JodaTime 是我得到 165 天的唯一方法
  • @user2007843 实际上不应该是 01/01/2014 和 06/17/2014 之间的 167 天吗?
  • @Thomas 这就是计算开始和结束日期,我不想这样做
  • @user2007843 我也没有计算结束日期,也就是第 168 天(167 完整天,即 01/01/14 00:00:00 到06/17/14 00:00:00) 所以如果不算 1 月 1 日,应该还是 166 天,不是吗?
【解决方案3】:

Period 以年、月和日为单位模拟时间的数量或数量, 比如2 years, 3 months and 4 days

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

long days = ChronoUnit.DAYS.between(LocalDate.of(2020,4,1), LocalDate.now());

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多