【发布时间】:2017-10-27 16:33:25
【问题描述】:
我正在使用 openjdk 版本 1.8.0_112-release 进行开发,但也需要支持以前的 JDK 版本(Java-8 之前) - 所以不能使用 java.time。
我正在编写一个实用类来计算日期,以查看保存的日期是否早于当前日期,这意味着它已过期。
但是,我不确定我是否以正确的方式执行此操作。我正在使用LocalDate 类来计算天数。过期时间从用户单击保存的日期和时间开始计算。该日期将被保存,并将针对此保存的日期和时间以及当前日期和时间(即用户登录时)进行检查。
这是最好的方法吗?我想继续上课LocalDate。
import org.threeten.bp.LocalDate;
public final class Utilities {
private Utilities() {}
public static boolean hasDateExpired(int days, LocalDate savedDate, LocalDate currentDate) {
boolean hasExpired = false;
if(savedDate != null && currentDate != null) {
/* has expired if the saved date plus the specified days is still before the current date (today) */
if(savedDate.plusDays(days).isBefore(currentDate)) {
hasExpired = true;
}
}
return hasExpired;
}
}
我正在使用这样的类:
private void showDialogToIndicateLicenseHasExpired() {
final LocalDate currentDate = LocalDate.now();
final int DAYS_TO_EXPIRE = 3;
final LocalDate savedDate = user.getSavedDate();
if(hasDateExpired(DAYS_TO_EXPIRE, savedDate, currentDate)) {
/* License has expired, warn the user */
}
}
我正在寻找一种考虑时区的解决方案。如果许可证设置为在 3 天内到期,并且用户要前往不同的时区。即他们可能基于小时领先或落后。许可证仍应过期。
【问题讨论】:
-
如果你使用的是java 8,你不需要使用
org.threeten.bp,你可以使用java.time.LocalDate类 -
正如 Hugo 所说,org.threeten.bp 来自 ThreeTen-Backport 项目。该库将大部分 java.time 功能向后移植到 Java 6 和 Java 7。Java 8 和 Java 9 中不需要向后移植,因为 java.time 是内置的。
-
请问,到期的具体时间是什么时候?这仅仅是保存时间后的 72 小时(3 * 24 = 72)吗?或者直到午夜?假设用户在 5 月 26 日上午 11 点 30 分点击了保存,那么是否应该在保存数据的时区的 5 月 29 日至 5 月 30 日之间的午夜到期?或者,第三个选项,在 3 天后的同一时钟时间?最后一个可能偶尔会给你 71 或 73 小时的时间来过渡到夏季时间(夏令时)。
-
@OleV.V.阅读您的评论应该是用户保存日期后的 72 小时。因此,当我们倒计时时,应该忽略午夜。
-
不要自己写时区代码,使用库youtube.com/watch?v=-5wpm-gesOY
标签: java localdate threetenbp