Java 乔达时间-下一次是X点

Java 乔达时间-下一次是X点,java,time,jodatime,java-time,localdatetime,Java,Time,Jodatime,Java Time,Localdatetime,我需要知道下一个约会时间,比如说20点 例如,如果是13.00小时,它会给我今天20.00的日期时间 但如果是21点,明天20点会给我 我怎样才能做到这一点?是否有一些内置函数我就是找不到它的名称 必要时,我也可以使用Java时间而不是Joda时间。如果时间超过20:00,则在DateTime中添加一天 演示: 输出: 注意:请在以下位置查看通知: Joda Time是Java事实上的标准日期和时间库 在JavaSE8之前。现在要求用户迁移到java.time JSR-310 使用现代日期时间A

我需要知道下一个约会时间,比如说20点

例如,如果是13.00小时,它会给我今天20.00的日期时间

但如果是21点,明天20点会给我

我怎样才能做到这一点?是否有一些内置函数我就是找不到它的名称

必要时,我也可以使用Java时间而不是Joda时间。

如果时间超过20:00,则在DateTime中添加一天

演示:

输出:

注意:请在以下位置查看通知:

Joda Time是Java事实上的标准日期和时间库 在JavaSE8之前。现在要求用户迁移到java.time JSR-310

使用现代日期时间API:

输出:


你试过什么?如果没有,为什么不呢?尝试将您的描述转换为代码。那会是什么样子?1 var time=当前时间2如果时间在desiredTime之后,则time=time+1天,否则什么都不做3 time=time。atTimedesiredTime@ArvindKumarAvinash这似乎是完全合理的要求。你为什么关心上下文?用户将报警设置为上午8点。如果他们在早上9点做,明天就要开始。如果他们在早上7点做,它需要在1小时内启动。我只是编了个例子,但你明白了。@rutchkiwi-不,我没有结束这个问题。我100%同意你的观点,没有理由结束这个问题,因为这个问题需要更加集中。这个问题集中在一个问题上,也很清楚。对不起,你有没有看过自己的输出。这是错误的@安德烈亚斯-你能告诉我你认为答案有什么不对吗?下一个13:00是支持明天3/30的13:00,下一个20.00应该是今天3/29的20:00。4个输出都不正确。@Andreas-所有输出都符合要求。请把这个问题再复习一遍。如果你说的是正确的,我可以编辑我的答案。好的,对不起,代码很混乱。该方法的输入将是当前日期/时间和目标时间,对吗?当然,其中一些输入可以在方法内部硬编码,但是为了完全重用,这些是方法必须处理的变量。因此,您输入的是当前时间,没有当前日期,并且硬编码目标时间,这很容易混淆。
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
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]