Создайте другой период времени, используя Joda
У меня есть сценарий для генерации определенного времени между двумя датами. Скажем, с 1 по 31 марта в качестве моего вклада. Мне нужно создать дату и время с конкретными часами, как показано ниже.
1 марта, 03:00 - 1 марта, 06:59
1 марта 07:00 - 1 марта 14:59
1 марта 15:00 - 2 марта 02:59
2 марта, 03:00 - 2 марта, 6:59
2 марта 07:00 - 2 марта 14:59
,
,
,
,
31 марта 15:00 - 31 марта 02:59
Я запутался, как генерировать эти разные периоды времени, используя Joda. Помогите мне сгенерировать эти времена.
1 ответ
Я реализовал решение для практики библиотеки Joda:
public class JodaDateTimeExercise {
private static final String PATTERN = "MMM $$ HH:mm";
public static void main(String[] args) {
DateTime dateTimeBegin = new DateTime(2000, 3, 1, 3, 0);
DateTime dateTimeEnd = dateTimeBegin.plusMinutes(239);
DateTime dateTimeBeginCopy = dateTimeBegin;
DateTime dateTimeEndCopy = dateTimeEnd;
for (int dayIndex = 0; dayIndex < 31; dayIndex++) {
printDateTime(dateTimeBeginCopy, dateTimeEndCopy);
dateTimeBeginCopy = dateTimeBeginCopy.plusHours(4);
dateTimeEndCopy = dateTimeEndCopy.plusHours(8);
printDateTime(dateTimeBeginCopy, dateTimeEndCopy);
dateTimeBeginCopy = dateTimeBeginCopy.plusHours(8);
dateTimeEndCopy = dateTimeEndCopy.plusHours(12);
printDateTime(dateTimeBeginCopy, dateTimeEndCopy);
dateTimeBegin = dateTimeBegin.plusDays(1);
dateTimeEnd = dateTimeEnd.plusDays(1);
dateTimeBeginCopy = dateTimeBegin;
dateTimeEndCopy = dateTimeEnd;
}
}
private static void printDateTime(DateTime dateTimeBegin, DateTime dateTimeEnd) {
System.out.print(dateTimeBegin.toString(PATTERN, Locale.US).replace("$$", formatDayOfMonth(dateTimeBegin.dayOfMonth().get())));
System.out.print(" - ");
System.out.println(dateTimeEnd.toString(PATTERN, Locale.US).replace("$$", formatDayOfMonth(dateTimeEnd.dayOfMonth().get())));
System.out.println();
}
public static String formatDayOfMonth(int dayOfMonthIndex) {
String suffix;
switch ((dayOfMonthIndex < 20) ? dayOfMonthIndex : dayOfMonthIndex % 10) {
case 1:
suffix = "st";
break;
case 2:
suffix = "nd";
break;
case 3:
suffix = "rd";
break;
default:
suffix = "th";
break;
}
return dayOfMonthIndex + suffix;
}
}
Вывод следующий:
1 марта, 03:00 - 1 марта, 06:59
1 марта 07:00 - 1 марта 14:59
1 марта 15:00 - 2 марта 02:59
2 марта, 03:00 - 2 марта, 6:59
2 марта 07:00 - 2 марта 14:59
2 марта 15:00 - 3 марта 02:59
...
31 марта 03:00 - 31 марта 06:59
31 марта 07:00 - 31 марта 14:59
31 марта 15:00 - 1 апреля 02:59
Как вы можете заметить, между моим выводом и вашим выводом есть небольшая разница. Если вы потратите время, чтобы понять, что я написал, вы можете легко исправить это самостоятельно.