2

假设我有一个日期对象标记为 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);
}
4

2 回答 2

3

我不认为有一个预先编写的方法可以做你想做的事情,但是编写一个实用方法很简单。

myDate话虽如此,您的代码很接近,但如果介于3:00:00.001and之间则无法正常工作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);
于 2013-02-13T17:07:45.103 回答
2

检查当前日期(过去日期)的一天中的小时,并找出它是否大于或等于 3,如果是则取下一个日期。否则今天..不会吗?当您想要完全相同的日期在 3:00:00 时,它可能不会给出结果。

于 2013-02-13T16:40:34.927 回答