如何找到两个Joda-Time DateTime实例之间的天数差异? 我的意思是,如果开始是星期一,结束是星期二,我期望返回值为1,而不管开始日期和结束日期的小时/分钟/秒。

天。daysBetween(start, end). getdays()如果开始在晚上,结束在早上,则返回0。

我也有其他日期字段相同的问题,所以我希望有一种通用的方法来“忽略”较不重要的字段。

换句话说,2月到3月4日之间的月份也是1,14:45到15:12之间的时间也是1。但是14:01和14:55之间的小时差是0。


当前回答

你可以使用LocalDate:

Days.daysBetween(new LocalDate(start), new LocalDate(end)).getDays() 

其他回答

常量日期和当前日期之间的差异(Joda)

你可以使用Days.daysBetween(jodaDate1,jodaDate2)

这里有一个例子:

        val dateTime: DateTime = DateTime.parse("14/09/2020",
            DateTimeFormat.forPattern("dd/MM/yyyy"))
        val currentDate = DateTime.now()
        //To calculate the days in between
        val dayCount = Days.daysBetween(dateTime,currentDate).days
        //Set Value to TextView 
        binding.daysCount.text = dayCount.toString()

你可以使用LocalDate:

Days.daysBetween(new LocalDate(start), new LocalDate(end)).getDays() 
public static int getDifferenceIndays(long timestamp1, long timestamp2) {
    final int SECONDS = 60;
    final int MINUTES = 60;
    final int HOURS = 24;
    final int MILLIES = 1000;
    long temp;
    if (timestamp1 < timestamp2) {
        temp = timestamp1;
        timestamp1 = timestamp2;
        timestamp2 = temp;
    }
    Calendar startDate = Calendar.getInstance(TimeZone.getDefault());
    Calendar endDate = Calendar.getInstance(TimeZone.getDefault());
    endDate.setTimeInMillis(timestamp1);
    startDate.setTimeInMillis(timestamp2);
    if ((timestamp1 - timestamp2) < 1 * HOURS * MINUTES * SECONDS * MILLIES) {
        int day1 = endDate.get(Calendar.DAY_OF_MONTH);
        int day2 = startDate.get(Calendar.DAY_OF_MONTH);
        if (day1 == day2) {
            return 0;
        } else {
            return 1;
        }
    }
    int diffDays = 0;
    startDate.add(Calendar.DAY_OF_MONTH, diffDays);
    while (startDate.before(endDate)) {
        startDate.add(Calendar.DAY_OF_MONTH, 1);
        diffDays++;
    }
    return diffDays;
}

接受的答案构建了两个LocalDate对象,如果要读取大量数据,这是非常昂贵的。 我用这个:

  public static int getDaysBetween(DateTime earlier, DateTime later)
  {
    return (int) TimeUnit.MILLISECONDS.toDays(later.getMillis()- earlier.getMillis());
  }

通过调用getMillis(),您可以使用已经存在的变量。 然后,使用简单的算术计算,不创建任何对象。

天类

使用withTimeAtStartOfDay方法使用Days类应该可以工作:

Days.daysBetween(start.withTimeAtStartOfDay() , end.withTimeAtStartOfDay() ).getDays()