我正在编写一个处理门禁读卡的项目。系统必须检查刷卡是否有权在特定时间进入特定门。例如,有些卡在周末或非工作时间(8-20)没有权限。我如何使用 Joda-Time 编写这样的东西?
现在我有:
//The code below that I have only checks for within a given date and time range.
DateTime start = new DateTime(2012, 1, 1, 0, 0);
DateTime end = new DateTime(2012, 12, 31, 0, 0);
Interval interval = new Interval(start, end);
boolean DateTimeCheck3 = interval.contains(time); // time is predeclared and gets current time from another class
使用
1 <= time.getDayOfWeek() && time.getDayOfWeek() <= 5
您可以确保一周中的某一天是在星期一 1
和星期五 5
之间。
java.time
2014 年 3 月,Java 8 引入了现代的
java.time
日期时间 API,取代了容易出错的遗留、java.util
日期时间 API。另外,下面显示的是Joda-Time主页上的通知:
请注意,从 Java SE 8 开始,用户被要求迁移到
(JSR-310) - JDK 的核心部分,它将取代它 项目。java.time
LocalDateTime#getDayOfWeek
返回给定 enum
的 LocalDateTime
常量,您可以将其用于比较。用枚举常量而不是数字来表示一周中的日子的优点是您不再需要记住它们是从 0 还是 1 开始。
演示:
public class Main {
public static void main(String[] args) {
// A sample date-time corresponding to `time` in code of your question
LocalDateTime ldt = LocalDateTime.now();
DayOfWeek dow = ldt.getDayOfWeek();
int hour = ldt.getHour();
if (!(dow.equals(DayOfWeek.SATURDAY) || dow.equals(DayOfWeek.SUNDAY) || hour < 8 || hour > 20)) {
System.out.println("Allowed");
// Rest of the processing
} else {
System.out.println("Not allowed");
// Rest of the processing
}
}
}
从 Trail:日期时间了解有关现代日期时间 API 的更多信息。