使用乔达生成不同的时间段



我有一个场景来生成两个日期之间的特定时间。假设 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;
    }
}

输出如下:

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月2日 15:00 - 3月3日 02:59

3月31日 03:00 - 3月31日 06:59

3月31日 07:00 - 3月31日 14:59

3月31日 15:00 - 4月1日 02:59

正如你所注意到的,我的输出和你的输出之间有一个很小的差异。如果你花时间理解我写的东西,你可以很容易地自己修复它。

相关内容

  • 没有找到相关文章

最新更新