如何使用下一个星期一的6:00 am获取一个DateTime / Calendar实例?

问题描述 投票:0回答:2

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

例如:

如果当前为Tue 05/05/2020 21:30,则代码必须返回Mon 11/05/2020 06:00的毫秒值

如果当前为Mon 04/05/2020 05:59,则代码必须返回Mon 04/05/2020 06:00的毫秒值

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

在下面的代码中,我尝试实现某种解决方案,但是当DateTime在星期一但06: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);
}
java android datetime jodatime
2个回答
0
投票

Joda的时间很适合这样的事情。例如,当天的毫秒数为DateTime.now().withTimeAtStartOfDay()。星期几是DateTime.now().dayOfWeek()(星期一= 1,星期二= 2,依此类推)。有一种plusDays()方法可以移至未来。将这些与switch语句结合起来以找出要添加的天数,然后您便会得出所需的解决方案。哦,重新阅读您的问题,应该很直接地增加从一天开始到6:00所需的毫秒数...对不起,我错过了;-)祝您好运!


0
投票

我认为这应该对您有用。 (DateUtils:来自commons-lang3 lib)

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.