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