Android 日历:转到未来的一天

Android Calendar: Get to the future day

我想为用户选择的特定日期设置闹钟,当我设置为当前日期的前一天时,它设置为过去的日期,我希望它设置为未来。

这是我的日历设置代码:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour.getHour());
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.AM_PM, Calendar.AM);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.Monday);

假设今天是星期四,当我将日期设置为星期一时,我希望将其设置为 4 天后,但它设置为 3 天前,即过去的星期一

你应该 add 而不是 set。添加后 Calendar 实例将正确地前进或减去(您也可以添加负数)。

通过设置其中一个属性,您可能必须处理所有回合和进位。

您可以使用以下 "technology":

  1. 像这样计算当前日期和将来要设置到日历的日期之间的天差

    //future date
    Calendar thatDay = Calendar.getInstance();
    thatDay.set(Calendar.HOUR_OF_DAY, hour.getHour());
    thatDay.set(Calendar.MINUTE, 0);
    thatDay.set(Calendar.SECOND, 0);
    thatDay.set(Calendar.AM_PM, Calendar.AM);
    thatDay.set(Calendar.DAY_OF_WEEK, Calendar.Monday);
    
    //current date
    Calendar newDay = Calendar.getInstance();
    
    long diff = thatDay.getTimeInMillis() - newDay.getTimeInMillis(); //result in millis
    
    //result in days
    long days = diff / (24 * 60 * 60 * 1000);
    
  2. 将您在第 1 步中计算的天数添加到日历中,例如:

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, hour.getHour());
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.AM_PM, Calendar.AM);
    calendar.add(Calendar.DATE, daysCount); // Add daysCount days to current date