我需要得到下一个日期时间,比如 20 点。
因此,例如,如果是 13.00 小时,它会给我与今天 20.00 对应的日期时间。
但如果是 21.00,它会在明天 20.00 给我。
我怎样才能做到这一点?是否有一些我找不到名称的内置函数?
在紧要关头,我也可以使用 Java Time 而不是 Joda Time。
我需要得到下一个日期时间,比如 20 点。
因此,例如,如果是 13.00 小时,它会给我与今天 20.00 对应的日期时间。
但如果是 21.00,它会在明天 20.00 给我。
我怎样才能做到这一点?是否有一些我找不到名称的内置函数?
在紧要关头,我也可以使用 Java Time 而不是 Joda Time。
DateTime
如果时间超过 20:00 ,则添加一天。
演示:
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalTime;
public final class Main {
public static final void main(String[] args) {
// Test
System.out.println(getNextTime("13.00"));
System.out.println(getNextTime("21.00"));
}
static DateTime getNextTime(String strTime) {
LocalTime time = LocalTime.parse(strTime);
DateTime dt = DateTime.now(DateTimeZone.getDefault()).withTime(new LocalTime(20, 0));
if (time.isAfter(new LocalTime(20, 0))) {
dt = dt.plusDays(1);
}
return dt;
}
}
输出:
2021-03-29T20:00:00.000+01:00
2021-03-30T20:00:00.000+01:00
注意:在Joda-Time主页查看以下通知
Joda-Time 是 Java SE 8 之前 Java 的事实上的标准日期和时间库。现在要求用户迁移到 java.time (JSR-310)。
使用现代日期时间 API:
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public final class Main {
public static final void main(String[] args) {
// Test
System.out.println(getNextTime("13.00"));
System.out.println(getNextTime("21.00"));
}
static ZonedDateTime getNextTime(String strTime) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH.mm");
LocalTime time = LocalTime.parse(strTime, dtf);
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.systemDefault()).withHour(20);
if (time.isAfter(LocalTime.of(20, 0))) {
zdt = zdt.plusDays(1);
}
return zdt;
}
}
输出:
2021-03-29T20:00:18.325419+01:00[Europe/London]
2021-03-30T20:00:18.327587+01:00[Europe/London]