首页 > 解决方案 > 如果结束时间不在android中的当前日期,如何获取结束日期

问题描述

我正在尝试制作一个需要开始日期、开始时间和结束时间的应用程序。如果结束时间不在开始日期,那么我如何根据结束时间计算结束日期。

这是我想要的截图

图片

如图所示,当你输入开始日期、开始时间和结束时间时,结束时间是在下一个日期结束,它会自动计算结束日期。(我也强调了它。)

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

标签: javaandroiddatetime

解决方案


java.time

    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

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

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在较旧和较新的 Android 设备上运行良好。它只需要至少Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
  • 在 Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从org.threeten.bp子包中导入日期和时间类。

链接


推荐阅读