Java Joda-Time,将LocalDate分配给Month和Year

时间:2014-05-23 00:06:51

标签: java jodatime

我之前从未使用Joda-Time,但我有ArrayList,其中包含具有LocalDate和count的对象。所以我在ArrayList中计算每一天,每天只在ArrayList中使用一次。 我需要计算一年中每个月的计数,这在列表中。

我的数据: E.g:

dd.MM.yyyy
17.01.1996 (count 2)
18.01.1996 (count 3)
19.02.1996 (count 4)
19.03.1996 (count 1)
18.05.1997 (count 3)

现在我想要outpur像这样:

MM.yyyy
01.1996 -> 2 (17.1.1996) +  3 (18.1.1996) = 5
02.1996 -> 4 (19.2.1996)                  = 4
03.1996 -> 1 (19.3.1996)                  = 1
05.1997 -> 3 (18.5.1997)                  = 3

我每个月都需要计算,但我不知道最好的方法是什么。

数据类:

private class Info{
   int count;
   LocalDate day;
}

结果我会放入一些包含月份和年份日期+计数的课程。

2 个答案:

答案 0 :(得分:5)

Joda-Time中,有一个表示年份+月份信息的类,名为YearMonth

您需要做的主要是构建Map<YearMonth, int>以存储每个YearMonth的计数,方法是循环显示包含LocalDate和计数的原始List,以及相应地更新地图。

LocalDateYearMonth的转换应该是直截了当的:YearMonth yearMonth = new YearMonth(someLocalDate);应该有效

在伪代码中,它看起来像:

List<Info> dateCounts = ...;
Map<YearMonth, Integer> monthCounts = new TreeMap<>();

for (Info info : dateCounts) {
    YearMonth yearMonth = new YearMonth(info.getLocalDate());
    if (monthCounts does not contains yearMonth) {
        monthCounts.put(yearMonth, info.count);
    } else {
        oldCount = monthCounts.get(yearMonth);
        monthCounts.put(yearMonth, info.count + oldCount);
    }
}

// feel free to output content of monthCounts now.
// And, with TreeMap, the content of monthCounts are sorted

答案 1 :(得分:0)

您正在寻找Joda-Time 2.3中getMonthOfYear课程的getYearLocalDate方法。

for ( Info info : infos ) {
    int year = info.day.getYear();
    int month = info.day.getMonthOfYear();
}

从那里,编写代码以适合您的任何方式汇总计数。您可以将年份图保留为导致数月地图的键。你可以创建一个格式为&#34; YYYY-MM&#34;作为地图的关键。