【问题标题】:TimeUnit Java returning zero days [duplicate]TimeUnit Java返回零天[重复]
【发布时间】:2021-12-12 12:44:11
【问题描述】:

您好想获取日期之间的天数。

以下是我尝试过的逻辑

final Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
final Date endDate = cal.getTime();
final Date currentDate = new Date();
System.out.println(TimeUnit.MILLISECONDS.toDays(endDate.getTime() - currentDate.getTime()));

它总是打印 0。期望打印 1。 有什么想法吗?

【问题讨论】:

  • 旁注:请避免使用过时的(双关语,抱歉)java.util.DateCalendar 类。它们有很多已知问题,已被java.time 包中的类取代。
  • 我更改为 java.time,它按预期工作,谢谢
  • endDatecurrentDate 都应该使用相同的基数,即应该是 final Calendar cal = Calendar.getInstance(); final Date currentDate = cal.getTime(); cal.add(Calendar.DATE, 1); final Date endDate = cal.getTime();
  • 我建议你不要使用CalendarDate。这些课程设计不良且早已过时。相反,因为 Java 8 使用来自java.time, the modern Java date and time APILocalDate

标签: java date calendar java-11


【解决方案1】:

一天是24*60*60*1000 毫秒。

endDate.getTime() - currentDate.getTime() 总是比那个短。

所以你应该总是给结果加 1:

System.out.println(TimeUnit.MILLISECONDS.toDays(endDate.getTime() - currentDate.getTime()) + 1);

【讨论】:

  • 这没有回答问题。检查my comment中的正确答案。
  • 一天是24*60*60*1000 毫秒。 不正确。一天可能长于或短于 24 小时。
【解决方案2】:

endDate.getTime() - currentDate.getTime() 的结果只比一天少了几毫秒,所以结果四舍五入为 0。

如果你用 currentDate 初始化你的日历,你会得到预期的结果:

final Date currentDate = new Date();
final Calendar cal = Calendar.getInstance();
cal.setTime(currentDate);
cal.add(Calendar.DATE, 1);
final Date endDate = cal.getTime();
System.out.println(TimeUnit.MILLISECONDS.toDays(endDate.getTime() - currentDate.getTime()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2021-11-11
    • 2016-07-06
    • 2016-12-30
    • 2015-10-01
    • 2012-01-17
    相关资源
    最近更新 更多