这里的其他答案都不错,但使用了过时的类。
java.time
使用Java 8及更高版本,我们现在内置了java.time框架(对于Java 6、7和Android也有后续支持)。它比旧的日期时间类有了巨大的改进。
java.time类包括一对恰好符合您需求的类:
- DayOfWeek:一个方便的枚举,表示每周七天,根据ISO 8601标准从星期一到星期日。
- LocalTime:表示没有日期和时区的时间。
有了这些预定义类型,您甚至不需要像其他评论和答案建议的那样定义自己的类。至少如果您将星期一至星期日作为排序天数的定义。枚举类型
DayOfWeek
按照那个顺序预定义了一周中的天。如果在您的项目中有意义,您可以结合
DayOfWeek
和
LocalTime
创建自己的类。
Java 枚举非常方便、灵活和强大(如果您不熟悉它们,请了解更多)。枚举有自己特殊的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 到 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 ) {
earlier.add ( key );
} else if ( comparison == 0 ) {
if ( value.isBefore ( now ) ) {
earlier.add ( key );
} else {
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