使用joda生成不同的时间段

时间:2015-06-11 17:39:23

标签: java loops datetime iterator jodatime

我有一个场景可以在两个日期之间生成特定时间。让我们说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生成这些不同的时间段。帮助我产生这些时间。

1 个答案:

答案 0 :(得分:2)

我已经实施了一个练习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

您可以注意到,我的输出和输出之间存在细微差别。如果您花时间了解我所写的内容,您可以自己轻松解决。