java - 根据开始日期和结束日期创建通知时间线?
问题描述
我知道这可能是一个初学者的问题,但它就在这里。现在,我正在创建一个学生管理应用程序,其中学生的信息存储在来自 android 应用程序的数据库(MySql)中。
每个学生在注册时都会输入开始日期和结束日期。开始日期和结束日期之间的最短天数为 30 天。
根据输入的日期,每 30 天每月向学生发送一次调查。如果输入作为开始日期,他们将在结束日期(最长 18 个月)之前每 30 天7/30/2020
收到他们的第一次月度调查和随后的月度调查。8/29/2020
有谁知道如何设置这些参数或者可以指出我正确的方向(也许指向另一个 stackpverflow 线程)?我有一个有效的注册系统,但我不知道如何捕捉时间、使用时间戳或为每月调查系统创建时间表。
我期待着您的回音!
解决方案
java.time 和 ThreeTenABP
使用LocalDate
java.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
子包中导入日期和时间类。
链接
- Oracle 教程:日期时间解释如何使用 java.time。
- Java 规范请求 (JSR) 310,
java.time
第一次描述的地方。 - ThreeTen Backport 项目,
java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。 - ThreeTenABP , ThreeTen Backport 的 Android 版
- 问题:如何在Android项目中使用ThreeTenABP,有非常详尽的解释。
推荐阅读
- php - PHP如何设置动态文件夹路径
- node.js - 如何使用库调用自定义函数?
- php - LoginController@Logout Laravel 5.6 (PHP) 在哪里?
- excel - 匹配新列中两列的第一个值
- reactjs - import 语句不起作用,但需要在 create-react-app 中工作
- powershell - 如何使用 PowerShell 脚本从位于另一台服务器上的 LDAP Active Directory 获取用户数据?
- ios - swift:一段时间后重复动画
- django - 如何查询 Django 中出现的 2 个字段的计数?
- java - 如何从 Java8 中的对象流中获取常用项
- java - 被“迷宫”模式迷惑的学习Java