假设我的日期对象标记为2013年2月13日晚上11点。我想在凌晨3点拿到下一个最快的约会对象。所以在这种情况下,它将是2013年2月14日凌晨3点。
我可以通过在日期字段中添加1天并将时间设置为凌晨3:00来完成此操作,但以下情况如下:
我的日期对象标记为2013年2月14日凌晨1点。在这里,我不需要添加一天,而只需设置时间。
有优雅的方法吗?下面是我到目前为止所做的,我认为它可以工作,但我只是想知道是否有一个api,使这更容易。像getNextSoonestDate()或其他东西
Calendar calendar = Calendar.getInstance();
//myDate is some arbitrary date, like one of the examples posted above (i.e. feb 13th 11pm)
calendar.setTime(myDate);
//set the calender to be 3am
calendar.set(Calendar.HOUR_OF_DAY, 3);
//check if this comes before my current date, if so we know we need to add a day
if (calendar.getTime().before(myDate)){
calendar.add(Calendar.DAY_OF_YEAR, 1);
}
答案 0 :(得分:3)
我认为没有预先编写的方法来做你想做的事情,但写一个实用工具方法很简单。
话虽如此,如果myDate
介于3:00:00.001
和3:59:59.999
之间,您的代码已关闭,但无法正常运行(我假设您希望它在下一次返回时发生)在这种情况下的一天) - 你需要将不太重要的字段清零:
public static Date getNextTime(Date base, int hourOfDay) {
Calendar then = Calendar.getInstance();
then.setTime(base);
then.set(Calendar.HOUR_OF_DAY, hourOfDay);
then.set(Calendar.MINUTE, 0);
then.set(Calendar.SECOND, 0);
then.set(Calendar.MILLISECOND, 0);
if (then.getTime().before(base)) {
then.add(Calendar.DAY_OF_YEAR, 1);
}
return then.getTime();
}
Date nextOccurrenceOf3am = getNextTime(myDate, 3);
答案 1 :(得分:2)
检查当前日期(通过日期)当天的小时,并查看它是否大于或等于3,如果是,则采取下一个日期。否则今天..不会那样吗?当你想要在3:00:00完全相同的日期时,它可能不会给出结果。