如何获取下周一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;
}
如何获取下周特定时间的毫秒值(自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;
}