使用joda生成不同的时间段
Generate different period of time using joda
我有一个场景可以生成两个日期之间的特定时间。假设 3 月 1 日至 3 月 31 日作为我的输入。我需要生成具有特定时间的日期时间,如下所示。
3 月 1 日 03:00 - 3 月 1 日 06:59
3 月 1 日 07:00 - 3 月 1 日 14:59
3 月 1 日 15:00 - 3 月 2 日 02:59
3 月 2 日 03:00 - 3 月 2 日 06:59
3 月 2 日 07:00 - 3 月 2 日 14:59
.
.
.
.
3 月 31 日 15:00 - 3 月 31 日 02:59
我很困惑如何使用 joda 生成这些不同的时间段。帮我生成这些时间。
我已经实现了练习 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;
}
}
输出如下:
Mar 1st 03:00 - Mar 1st 06:59
Mar 1st 07:00 - Mar 1st 14:59
Mar 1st 15:00 - Mar 2nd 02:59
Mar 2nd 03:00 - Mar 2nd 06:59
Mar 2nd 07:00 - Mar 2nd 14:59
Mar 2nd 15:00 - Mar 3rd 02:59
...
Mar 31st 03:00 - Mar 31st 06:59
Mar 31st 07:00 - Mar 31st 14:59
Mar 31st 15:00 - Apr 1st 02:59
如您所见,我的输出与您的输出之间存在细微差别。如果你花时间理解我写的东西,你可以很容易地自己修复它。
我有一个场景可以生成两个日期之间的特定时间。假设 3 月 1 日至 3 月 31 日作为我的输入。我需要生成具有特定时间的日期时间,如下所示。
3 月 1 日 03:00 - 3 月 1 日 06:59
3 月 1 日 07:00 - 3 月 1 日 14:59
3 月 1 日 15:00 - 3 月 2 日 02:59
3 月 2 日 03:00 - 3 月 2 日 06:59
3 月 2 日 07:00 - 3 月 2 日 14:59
.
.
.
.
3 月 31 日 15:00 - 3 月 31 日 02:59
我很困惑如何使用 joda 生成这些不同的时间段。帮我生成这些时间。
我已经实现了练习 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;
}
}
输出如下:
Mar 1st 03:00 - Mar 1st 06:59
Mar 1st 07:00 - Mar 1st 14:59
Mar 1st 15:00 - Mar 2nd 02:59
Mar 2nd 03:00 - Mar 2nd 06:59
Mar 2nd 07:00 - Mar 2nd 14:59
Mar 2nd 15:00 - Mar 3rd 02:59
...
Mar 31st 03:00 - Mar 31st 06:59
Mar 31st 07:00 - Mar 31st 14:59
Mar 31st 15:00 - Apr 1st 02:59
如您所见,我的输出与您的输出之间存在细微差别。如果你花时间理解我写的东西,你可以很容易地自己修复它。