我使用按位操作来存储可用性,其中1位代表一分钟。所以一天的可用性可以用1个长度来表示(8个字节,所以64位中的60位)可以用来表示1小时,所以24个长度可以表示每天的可用性。
现在我有一系列的时间(例如,2:00 - 4:00,15:00到17:00),我需要将其转换为位掩码,以便与上面的可用性长度进行比较,以查看掩码中的范围是可用还是不可用(&使用掩码)将此时间范围转换为位的最佳方法是什么?
发布于 2012-02-21 01:54:02
我认为这是可行的:
private static int getMinuteOfDay(Date date) {
Calendar cal = new GregorianCalendar();
cal.setTime(date);
return cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE);
}
private static void addAvailability(Date startTime, Date endTime, BitSet bs) {
int startMinute = getMinuteOfDay(startTime);
int endMinute = getMinuteOfDay(endTime);
bs.set(startMinute, endMinute);
}
private static boolean timeIsAvailable(Date time, BitSet bs) {
return bs.get(getMinuteOfDay(time));
}
static DateFormat TIME_FORMAT = new SimpleDateFormat("HH:MM:ss");
public static void main(String[] args) {
BitSet availability = new BitSet();
try {
addAvailability(TIME_FORMAT.parse("02:00:00"), TIME_FORMAT.parse("04:00:00"), availability);
addAvailability(TIME_FORMAT.parse("15:00:00"), TIME_FORMAT.parse("17:00:00"), availability);
System.out.println(timeIsAvailable(TIME_FORMAT.parse("01:19:00"), availability));
System.out.println(timeIsAvailable(TIME_FORMAT.parse("02:00:00"), availability));
System.out.println(timeIsAvailable(TIME_FORMAT.parse("02:01:00"), availability));
System.out.println(timeIsAvailable(TIME_FORMAT.parse("04:00:00"), availability));
System.out.println(timeIsAvailable(TIME_FORMAT.parse("04:01:00"), availability));
System.out.println(timeIsAvailable(TIME_FORMAT.parse("16:00:00"), availability));
System.out.println(timeIsAvailable(TIME_FORMAT.parse("17:10:00"), availability));
} catch (ParseException e) {
throw new RuntimeException(e);
}
}结果:
false
true
true
false
false
true
false发布于 2012-02-21 01:53:21
将问题简化为更简单的步骤:
https://stackoverflow.com/questions/9365707
复制相似问题