首页 > 解决方案 > 根据开始日期和结束日期创建通知时间线?

问题描述

我知道这可能是一个初学者的问题,但它就在这里。现在,我正在创建一个学生管理应用程序,其中学生的信息存储在来自 android 应用程序的数据库(MySql)中。

每个学生在注册时都会输入开始日期和结束日期。开始日期和结束日期之间的最短天数为 30 天。

根据输入的日期,每 30 天每月向学生发送一次调查。如果输入作为开始日期,他们将在结束日期(最长 18 个月)之前每 30 天7/30/2020收到他们的第一次月度调查和随后的月度调查。8/29/2020

有谁知道如何设置这些参数或者可以指出我正确的方向(也许指向另一个 stackpverflow 线程)?我有一个有效的注册系统,但我不知道如何捕捉时间、使用时间戳或为每月调查系统创建时间表。

我期待着您的回音!

标签: javaandroidtimestamp

解决方案


java.time 和 ThreeTenABP

使用LocalDatejava.time,现代 Java 日期和时间 API。做一个简单的演示,首先声明:

static final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M/d/u");
static final int daysBetweenSurveys = 30;

然后我们可以做如下的事情:

    LocalDate start = LocalDate.parse("7/30/2020", dateFormatter);
    LocalDate end = LocalDate.parse("12/5/2020", dateFormatter);
    
    LocalDate surveyDate = start.plusDays(daysBetweenSurveys);
    while (! surveyDate.isAfter(end)) {
        System.out.println("Survey " + surveyDate.format(dateFormatter));
        surveyDate = surveyDate.plusDays(daysBetweenSurveys);
    }

输出:

Survey 8/29/2020
Survey 9/28/2020
Survey 10/28/2020
Survey 11/27/2020

问题:java.time 不需要 Android API 级别 26 吗?

java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6

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

链接


推荐阅读