【问题标题】:period.getDays() return each time 0 in androidperiod.getDays() 在android中每次返回0
【发布时间】:2020-08-09 07:20:42
【问题描述】:

我尝试从日历中获取当前日期和第二个选定日期之间的正确时差。 在这种情况下,我使用 LocalDate 和 3 种方法 getDays() getMonths() getYears() 来获取日期和月份以及年份:

public int dateDiff(int year,int month,int day) {
    final int Day = c.get(Calendar.DAY_OF_MONTH);
    final int Month = c.get(Calendar.MONTH);
    final int Year = c.get(Calendar.YEAR);
    LocalDate localDate1 = LocalDate.of(year,month,day);
    LocalDate localDate2 = LocalDate.of(Year,Month,Day);

    Period period = Period.between(localDate2,localDate1);
    int dayDiff = period.getDays();

    return dayDiff;
}

public void onSelectedDayChange(@NonNull CalendarView view, final int year, final int month, final int dayOfMonth) {
    textView.setText(""+dateDiff(year, month, day));
}

但是每次我测试在 textView "0" 中得到的代码时 我尝试查看变量“period”的值,我得到了(P2M8D 'this result got in my example'),这意味着变量 period 计算了天数和方法中的问题之间的差异。 我怎么解决这个问题?

【问题讨论】:

  • 打开调试器并检查值 mate。
  • 我建议你不要使用 Calendar 类,因为它已经过时了。您已经可以访问 Java 8 日期和时间 API(在 java.time 包中),因此您应该使用它们。
  • 我使用Calendar,因为我的项目中需要日历。用户点击他想要的日期并写一个事件
  • 你能不能用LocalDate.now()替换当前的日期逻辑,然后试试。
  • period.getDays() 可能不是你想要的,使用ChronoUnit.DAYS.betweenstackoverflow.com/questions/30833582/…。你仍然不应该得到0。您没有向我们展示的代码中还有一些其他问题。

标签: java android localdate period


【解决方案1】:

这个项目中的问题在于变量的名称,我使用当前时间和所选时间的相同名称,我只是将第一个字母改为大写,但这会产生问题。 这就是为什么每次我运行项目时我都得到 0 我这样改变程序:

public int dateDiff(int year,int month,int day) {
final int dayOfToday = c.get(Calendar.DAY_OF_MONTH);
final int monthOfToday = c.get(Calendar.MONTH);
final int yearOfToday = c.get(Calendar.YEAR);
LocalDate localDate1 = LocalDate.of(year,month,day);
LocalDate localDate2 = LocalDate.of(Year,Month,Day);

Period period = Period.between(localDate2,localDate1);
int dayDiff = period.getDays();

return dayDiff;
}

【讨论】:

    【解决方案2】:

    在这里,这应该会有所帮助。

    public int dateDiff(int year,int month,int day) {
      Calendar thatDay = Calendar.getInstance();
      thatDay.set(Calendar.DAY_OF_MONTH,day);
      thatDay.set(Calendar.MONTH,month); // 0-11 so 1 less
      thatDay.set(Calendar.YEAR, year);
    
      Calendar today = Calendar.getInstance();
    
      long diff = today.getTimeInMillis() - thatDay.getTimeInMillis(); //result in millis
      long days = diff / (24 * 60 * 60 * 1000);
      return days;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-26
      • 2015-12-15
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多