如何获取下周一6:00am时间的DateTime/Calendar实例?

How to get a DateTime/Calendar instance with the Time of next Monday 6:00am?

如何获取下周特定时间的毫秒值(自Unix Epoch起)。当我的代码执行时,它需要在下周一 6:00 am 以毫秒为单位。我不能传入任何静态值,它必须是动态的。

例如:

如果当前是 Tue 05/05/2020 21:30 代码必须 return Mon 11/05/2020 06:00

的毫秒值

如果当前是 Mon 04/05/2020 05:59 代码必须 return Mon 04/05/2020 06:00

的毫秒值

我读过很多类似的问题,但其中 none 给出了明确的答案或只关注星期几而不考虑具体时间(在我的例子中是 06:00).我研究过使用 TemporalAdjusters 但我犹豫是否将它们包含在我的 android 项目中,因为它们需要 API 26(我的最小值是 21)。我看过 JodaTime,但找不到合适的函数来舍入到特定时间。

在下面的代码中,我试图实现某种解决方案,但在 DateTime 为星期一但在 06:00 之后遇到了问题6:00。

Calendar date1 = Calendar.getInstance();
date1.setTimeInMillis(System.currentTimeMillis());

while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
    date1.add(Calendar.DATE, 1);
}
while (date1.get(Calendar.HOUR_OF_DAY) < 6){
    date1.add(Calendar.HOUR,1);
}

Joda 时间非常适合做这样的事情。例如,当天的毫秒为DateTime.now().withTimeAtStartOfDay()DateTime.now().dayOfWeek() 是一周中的哪一天(星期一 = 1,星期二 = 2,依此类推)。有一个plusDays()方法可以移动到未来。将这些与 switch 语句结合起来计算出要添加的天数,您应该会得到所需的解决方案。哦,重新阅读你的问题,添加从一天开始到 6:00 所需的毫秒数应该很简单......抱歉我错过了 ;-) 祝你好运!

我认为这对你有用。 (DateUtils:来自 commons-lang3 库)

public Date getNextMonday() {
   Calendar now = Calendar.getInstance();

   while (now.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY || now.get(Calendar.HOUR_OF_DAY) > 6) {
      now.add(Calendar.DATE, 1);
      now.set(Calendar.HOUR, 0);
   }

   Date date = now.getTime();
   date = DateUtils.truncate(date, Calendar.DATE);
   date = DateUtils.addHours(date, 6);

   return date;
}