将Joda时间段划分为所需大小的间隔?

Jed*_*ght 3 java jodatime

我有一个"时间段"(P)的时间,由开始时间(S)和结束时间(E)表示.我想将P分成大小为D的C块.也就是说,

P = C*D + R,其中R是剩余或剩余时间.

例如.

S = NOW, E = 10 sec after NOW, D = 3 sec.
Therefore, P = 10 sec, C = 3, R = 1 sec. 
Run Code Online (Sandbox Code Playgroud)

我想存储和显示所有块C的开始时间,结束时间和大小.最后,我想存储并显示剩余部分.如何使用Joda Time执行此操作?

API是否提供了简单的方法和类来完成此操作,或者我必须找到出路?

这个问题只是我在这里发布的另一个问题的一小部分

Daa*_*aan 10

我不确定这段代码是否符合您的要求,但它可能会让您走上正轨.

我假设您有两个DateTime来表示开始和结束日期,因为Joda-Time Period表示一段时间,例如1个月或2个星期.它没有特定的开始或结束,例如Interval表示两个时刻之间的一段时间.

import java.util.*;
import org.joda.time.*;

class Test {
    public static void main(String... args) {
        DateTime now = new DateTime();
        List<Interval> list = splitDuration(now, now.plusSeconds(10), 3, 3 * 1000);

        for(Interval i : list) {
            System.out.println(i.getStart() + " - " +
                               i.getEnd() + " - " +
                               i.toDurationMillis());
        }
    }

    static List<Interval> splitDuration(DateTime start, DateTime end, long chunkAmount, long chunkSize) {
        long millis = start.getMillis();
        List<Interval> list = new ArrayList<Interval>();

        for(int i = 0; i < chunkAmount; ++i) {
            list.add(new Interval(millis, millis += chunkSize));
        }

        list.add(new Interval(millis, end.getMillis()));
        return list;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下输出:

2013-03-12T12:29:01.781+01:00 - 2013-03-12T12:29:04.781+01:00 - 3000
2013-03-12T12:29:04.781+01:00 - 2013-03-12T12:29:07.781+01:00 - 3000
2013-03-12T12:29:07.781+01:00 - 2013-03-12T12:29:10.781+01:00 - 3000
2013-03-12T12:29:10.781+01:00 - 2013-03-12T12:29:11.781+01:00 - 1000
Run Code Online (Sandbox Code Playgroud)