Java не имеет типа, который представляет время недели (день недели и время дня).Я предлагаю:
- Использовать java.time, современный Java-интерфейс даты и времени.
- Разработать класс для представления вашего времени.
- Внутренне только в вашем классепредставляйте свое время как конкретную дату и время на какой-то неделе, которую вы решитеЭто даст вам бесплатную сортировку и разницу в минутах.
Ваш класс может выглядеть следующим образом:
/** A time of week like "MON 17:00". In other words a day of week and time of day. */
public class TimeOfWeek implements Comparable<TimeOfWeek> {
private static DateTimeFormatter dayTimeFormatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("EEE H:mm")
.toFormatter(Locale.ENGLISH);
/** First day of the week used internally for date-times, Sun Dec 28, 1969 */
private static LocalDate firstDate
= LocalDate.EPOCH.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY));
/**
* Internal representation;
* always within the week of the epoch, Sun Dec 28, 1969 through Sat Jan 3, 1970.
*/
private LocalDateTime dateTime;
public TimeOfWeek(String dayTimeString) {
TemporalAccessor parsed = dayTimeFormatter.parse(dayTimeString);
DayOfWeek dow = DayOfWeek.from(parsed);
LocalTime time = LocalTime.from(parsed);
dateTime = firstDate.with(TemporalAdjusters.nextOrSame(dow)).atTime(time);
assert ! dateTime.isBefore(firstDate.atStartOfDay()) : dateTime;
assert dateTime.isBefore(firstDate.plusWeeks(1).atStartOfDay()) : dateTime;
}
/** The order is by day of week, Sunday first, then by time of day. */
@Override
public int compareTo(TimeOfWeek other) {
return this.dateTime.compareTo(other.dateTime);
}
/** @return The difference in minutes between this and other (signed) */
int minutesUntil(TimeOfWeek other) {
return Math.toIntExact(ChronoUnit.MINUTES.between(this.dateTime, other.dateTime));
}
@Override
public String toString() {
return dateTime.format(dayTimeFormatter);
}
}
Теперь для сортировки списка TimeOfWeek
объектов:
List<TimeOfWeek> dayTimes = Arrays.asList(new TimeOfWeek("Tue 5:00"),
new TimeOfWeek("SAT 23:59"),
new TimeOfWeek("SUN 00:00"),
new TimeOfWeek("MON 17:00"));
dayTimes.sort(Comparator.naturalOrder());
System.out.println(dayTimes);
Вывод:
[Вс 0:00, Пн 17:00, Вт 5:00, Сб 23:59]
Найтипопарные различия между объектами в отсортированном списке:
for (int i = 1; i < dayTimes.size(); i++) {
TimeOfWeek start = dayTimes.get(i - 1);
TimeOfWeek end = dayTimes.get(i);
System.out.println("Difference between " + start + " and " + end + ": "
+ start.minutesUntil(end) + " minutes");
}
Difference between Sun 0:00 and Mon 17:00: 2460 minutes
Difference between Mon 17:00 and Tue 5:00: 720 minutes
Difference between Tue 5:00 and Sat 23:59: 6899 minutes
Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее, какиспользовать java.time
.