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

Posted

技术标签:

【中文标题】Java Joda-Time ,将 LocalDate 分配给 Month 和 Year【英文标题】:Java Joda-Time , assign LocalDate to Month and Year 【发布时间】:2014-07-12 05:04:57 【问题描述】:

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

我的数据: 例如:

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)

现在我想要这样的输出:

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;

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

【问题讨论】:

【参考方案1】:

在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

【讨论】:

谢谢,它应该正常工作。您只是在伪代码 new YearCount(info.getLocalDate()); 中犯了一个小错误。应该是新的 YearMonth (info.getLocalDate()); ,但很容易弄清楚。 @user3658759 大声笑我不知道为什么我在那里写了那个奇怪的类名。现已修复【参考方案2】:

您正在寻找 Joda-Time 2.3 中 LocalDate 类的 getMonthOfYeargetYear 方法。

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

从那里,编写代码以任何适合您的方式汇总计数。您可以保留一张年份地图作为通向月份地图的键。您可以创建一个格式为“YYYY-MM”的字符串作为映射键。

【讨论】:

以上是关于Java Joda-Time ,将 LocalDate 分配给 Month 和 Year的主要内容,如果未能解决你的问题,请参考以下文章

JAVA秒会技术之Joda-Time满足你所有关于日期的处理

Java日期计算之Joda-Time

Java日期简化工具Joda-Time

我应该用threeten代替joda-time吗

Java中的Joda-Time间隔是不是有替代方法,它可以作为结束时间

Joda-Time 学习笔记