使用JodaTime计算每个时间间隔

时间:2013-01-10 11:37:35

标签: java jodatime

我有Map<DateTime,Integer> rawCount,其中包含每个日期的原始计数(time-series)。

我想构建一个聚合地图,它将包含特定时间间隔内的计数。

例如,如果duration = (1000*1*60*60)start = new DateTime()此地图将包含从现在到rawCount地图中最后一个日期的每小时总计数。

我正在使用JodaTime,因为Interval不可比,我希望从最近到最早的日期订购地图,使用TreeMap是不可能的。< / p>

我很困惑哪个Object最适合我的用例(Interval是否合适?)以及如何编写此函数。

1 个答案:

答案 0 :(得分:2)

这就是我解决它的方法。

Map<DateTime,Integer> rawCount = ....
DateTime start = ....
long duration = 1*60*60*1000;

DateTime lastDate = start;
// find the last date
for (DateTime dateTime : rawCount.keySet()) {
    if (dateTime.isAfter(lastDate))
        lastDate = dateTime;
}
int intervals = (int) ((lastDate.getMillis() - start.getMillis())/duration) + 1;
int[] counts = new int[intervals];
for (Map.Entry<DateTime, Integer> entry : rawCount.entrySet()) {
    DateTime key = entry.getKey();
    int interval = (int) ((key.getMillis() - start.getMillis()) / duration);
    counts[interval] += entry.getValue(); 
}