Android计算两个日期之间的天数

新手上路,请多包涵

我编写了以下代码来查找两个日期之间的天数

    startDateValue = new Date(startDate);
    endDateValue = new Date(endDate);
    long diff = endDateValue.getTime() - startDateValue.getTime();
    long seconds = diff / 1000;
    long minutes = seconds / 60;
    long hours = minutes / 60;
    long days = (hours / 24) + 1;
    Log.d("days", "" + days);

当开始日期和结束日期分别为 2/3/2017 和 3/3/2017 时,显示的天数为 29。虽然当它们在同一天时,它显示 1。(请假的天数。所以如果一个人只休一天假,他必须选择相同的开始和结束日期。所以在这种情况下,他休了两天假)。

我究竟做错了什么?感谢您的时间。

注意:请不要使用日期构造函数。检查下面接受的答案。使用 simpledateformat 或 Joda 时间。日期构造函数已弃用。

原文由 debo.stackoverflow 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 795
2 个回答

您生成日期对象的代码:

 Date date = new Date("2/3/2017"); //deprecated

您将得到 28 天的答案,因为根据 Date(String) 构造函数,它正在考虑日 = 3,月 = 2 和年 = 2017

您可以按如下方式将 String 转换为 Date:

 String dateStr = "2/3/2017";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date = sdf.parse(dateStr);

使用上面的模板制作您的 Date 对象。然后使用下面的代码计算两个日期之间的天数。希望这能解决问题。

可以按如下方式进行:

 long diff = endDateValue.getTime() - startDateValue.getTime();
System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));

请检查 链接

如果你使用 Joda Time,那就简单多了:

 int days = Days.daysBetween(date1, date2).getDays();

请检查 JodaTime

Java项目中如何使用JodaTime

原文由 SachinSarawgi 发布,翻译遵循 CC BY-SA 3.0 许可协议

科特林

下面是计算从今天到某个日期的天数的示例:

  val millionSeconds = yourDate.time - Calendar.getInstance().timeInMillis
 leftDays.text = TimeUnit.MILLISECONDS.toDays(millionSeconds).toString() + "days"

如果要计算两天,则更改:

 val millionSeconds = yourDate1.time - yourDate2.time

应该管用。

原文由 William Hu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题