【问题标题】:How to get the ending date if ending time is not lies in current date in android如果结束时间不在android中的当前日期,如何获取结束日期
【发布时间】:2019-09-18 08:27:29
【问题描述】:

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

这是我想要的截图

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

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

【问题讨论】:

  • 在开始日期加上一定数量的时间单位,也许吧?你用什么 API 来计时?我知道 Android 仅在较新版本中支持 java.time(应该优先使用),我认为从 API 级别 24 或更高...
  • 是的,我正在使用它。

标签: java android datetime


【解决方案1】:

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());

这个 sn-p 的输出是:

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

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

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

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

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

链接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多