这里其他的答案是好的,但使用过时的类。
java.time
利用Java 8后来我们现在有java.time框架内置(背部端口的Java 6 & 7和Android)。与以前的日期时间课程相比有了很大的改进。
的java.time类包括一对类适合您的具体需求:
有了这些类型的预定义,您甚至不需要根据其他评论和答案的建议来定义自己的类。至少如果你的排序的定义周一至周日。 DayOfWeek
枚举按该顺序具有预定义的几周。你可能让你自己的班级结合DayOfWeek
和LocalTime
如果它是有意义的更大的项目。
Java enums是真的方便,灵活,功能强大(所以learn more如果他们是新的给你)。枚举有其自己的特殊实现Set
和Map
,命名适当,EnumSet
和EnumMap
。我们可以使用EnumMap
来跟踪一周中的每一天,将其映射到一天的时间(一个LocalTime
对象)。
EnumMap<DayOfWeek , LocalTime> dayToTimeMap = new EnumMap<> (DayOfWeek.class);
dayToTimeMap.put (DayOfWeek.TUESDAY , LocalTime.parse ("20:00"));
dayToTimeMap.put (DayOfWeek.WEDNESDAY , LocalTime.of (15 , 0));
dayToTimeMap.put (DayOfWeek.THURSDAY , LocalTime.parse ("20:00"));
dayToTimeMap.put (DayOfWeek.FRIDAY , LocalTime.parse ("18:00"));
dayToTimeMap.put (DayOfWeek.SATURDAY , LocalTime.parse ("15:00"));
获取当前的星期几和每日时间。
DayOfWeek today = DayOfWeek.WEDNESDAY;
LocalTime now = LocalTime.of (11 , 13);
做一空套一个跟踪一天的时间是相同或迟于今天,现在,和一个跟踪较早天时间。作为EnumSet
,它们的自然顺序是在DayOfWeek
枚举中声明的顺序(周一至周日,1-7)。
EnumSet<DayOfWeek> earlier = EnumSet.noneOf (DayOfWeek.class);
EnumSet<DayOfWeek> later = EnumSet.noneOf (DayOfWeek.class);
将DayOfWeek-to-LocalTime地图循环。查看DayOfWeek是在今天之前,等于还是晚于今天。如果等于今天,则将其对象LocalTime
与我们的now
对象进行比较。将此DayOfWeek对象分配给earlier
集合或later
集合。
for (Map.Entry<DayOfWeek , LocalTime> entry : dayToTimeMap.entrySet()) {
DayOfWeek key = entry.getKey();
LocalTime value = entry.getValue();
int comparison = key.compareTo (today);
if (comparison < 0) { // if earlier day…
earlier.add (key);
} else if (comparison == 0) { //If same day…
if (value.isBefore (now)) {
earlier.add (key);
} else { // Else same time as now or later than now…
later.add (key);
}
} else if (comparison > 0) {
later.add (key);
} else {
throw new RuntimeException ("Unexpectedly reached IF-ELSE for comparison: " + comparison);
}
}
转储到控制台。我们要循环设置later
,然后按照问题中列出的要求设置earlier
。
System.out.println ("dayToStringMap: " + dayToTimeMap);
System.out.println ("sorted by today: " + today + " " + now + " is: ");
for (DayOfWeek dayOfWeek : later) {
LocalTime localTime = dayToTimeMap.get (dayOfWeek);
System.out.println (dayOfWeek + " " + localTime);
}
for (DayOfWeek dayOfWeek : earlier) {
LocalTime localTime = dayToTimeMap.get (dayOfWeek);
System.out.println (dayOfWeek + " " + localTime);
}
运行时。
dayToStringMap: {TUESDAY=20:00, WEDNESDAY=15:00, THURSDAY=20:00, FRIDAY=18:00, SATURDAY=15:00}
sorted by today: WEDNESDAY 11:13 is:
WEDNESDAY 15:00
THURSDAY 20:00
FRIDAY 18:00
SATURDAY 15:00
TUESDAY 20:00
您的代码受* Object Denial *异味的影响,这会使得包括当前问题在内的一切都变得更加困难。 Java希望你写类,不要抗拒。 –
+1 @MarkoTopolnik – DaGLiMiOuX
今天是星期三 - 德国时间11:35。 3(今天15:00),4(星期三是星期四之后),5,6,7,2(星期日之后是(在这个阵列中)星期二(星期一))。我编辑我的问题:实际上是时间和周日。 – user1878413