Java 在android中,如果结束时间不在当前日期,如何获取结束日期

Java 在android中,如果结束时间不在当前日期,如何获取结束日期,java,android,datetime,Java,Android,Datetime,我试图使一个应用程序,需要开始日期,开始时间和结束时间。如果结束时间不在开始日期内,那么如何根据结束时间计算结束日期 这是我想要的截图 如图所示,当您输入开始日期、开始时间和结束时间时,结束时间将在下一个日期结束,它将自动计算结束日期。(我还画了线。) 我怎样才能做到这一点呢?这背后的逻辑是什么。java.time 此代码段的输出为: 我已经向您展示了如何使用DateTimeFormatter格式化时间。您可能也希望对日期使用格式化程序 问题:我可以在Android上使用java.time吗?

我试图使一个应用程序,需要开始日期,开始时间和结束时间。如果结束时间不在开始日期内,那么如何根据结束时间计算结束日期

这是我想要的截图

如图所示,当您输入开始日期、开始时间和结束时间时,结束时间将在下一个日期结束,它将自动计算结束日期。(我还画了线。)

我怎样才能做到这一点呢?这背后的逻辑是什么。

java.time 此代码段的输出为:

我已经向您展示了如何使用
DateTimeFormatter
格式化时间。您可能也希望对日期使用格式化程序

问题:我可以在Android上使用java.time吗? 是的,java.time在较旧和较新的Android设备上运行良好。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在Java6和Java7中,获取三个后端口,即现代类的后端口(三个十用于JSR310;参见底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

也许可以在开始日期添加一定数量的时间单位?你用什么API来计算时间?我知道Android只支持较新版本的
java.time
(最好使用),我认为API级别为24或更高…是的,我正在使用它。
    ZoneId zone = ZoneId.of("America/Chicago");
    DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h:mm a (OOOO)", Locale.US);

    LocalDate startDate = LocalDate.of(2019, Month.SEPTEMBER, 18);
    LocalTime startTime = LocalTime.of(14, 0);
    LocalTime endTime = LocalTime.of(4, 0);

    ZonedDateTime start = ZonedDateTime.of(startDate, startTime, zone);
    ZonedDateTime end = ZonedDateTime.of(startDate, endTime, zone);
    if (end.isBefore(start)) {
        end = ZonedDateTime.of(startDate.plusDays(1), endTime, zone);
    }

    System.out.println("Date: " + startDate);
    System.out.println("Start Time: " + start.format(timeFormatter));
    System.out.println("End Time: " + end.format(timeFormatter));
    System.out.println("Ends on " + end.toLocalDate());
Date: 2019-09-18
Start Time: 2:00 PM (GMT-05:00)
End Time: 4:00 AM (GMT-05:00)
Ends on 2019-09-19