java - 哪些周与哪些月份相关联?

标签 java jodatime

JodaTime 中有没有办法轻松确定哪个星期属于哪个月份?

给定月份数字的东西返回与之相关的一年中的几周。如果一周中有 4 天以上的天数在其中,则应将一周与特定月份相关联。

In 2014 for month = 1 then weeks = [1, 2, 3, 4, 5] (note 5 weeks because of 4 days rule)
In 2014 for month = 3 then weeks = [10, 11, 12, 13] (note 4 weeks because of same rule)

我不想“手动”计算这个...

最佳答案

你必须实例化DateTime指定周数的对象,然后只读取它的 month property (使用 Joda-TimeGoogle Guava )。

        DateTime dateTime = new DateTime().withWeekOfWeekyear(i).withDayOfWeek(DateTimeConstants.MONDAY);
        if (dateTime.dayOfMonth().getMaximumValue() - dateTime.dayOfMonth().get() < 3) {
            dateTime = dateTime.plusMonths(1);
        }
        int month = dateTime.monthOfYear().get();

我们还可以使用下面的函数来打印所有月份和属于他们的星期:

public static void main(String[] args) {
    Multimap<Integer, Integer> monthsWithWeeks = LinkedListMultimap.create();

    int weeksInYear = new DateTime().withYear(2014).weekOfWeekyear().getMaximumValue();
    for (int i = 1; i <= weeksInYear; i++) {
        DateTime weekDate = new DateTime().withWeekOfWeekyear(i).withDayOfWeek(DateTimeConstants.MONDAY);
        if (weekDate.dayOfMonth().getMaximumValue() - weekDate.dayOfMonth().get() < 3) {
            weekDate = weekDate.plusMonths(1);
        }
        int month = weekDate.monthOfYear().get();
        monthsWithWeeks.put(month, i);
    }

    for (Integer month : monthsWithWeeks.keySet()) {
        System.out.println(String.format("%d => [%s]", month, Joiner.on(',').join(monthsWithWeeks.get(month))));
    }
}

关于java - 哪些周与哪些月份相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21054984/

相关文章:

java - 如何计算 zip 文件中的特定文件数

java - 从周数中获取 Joda Time 的日期名称

java - 使用 Joda 的 DateTimeFormatter 解析时如何忽略时区?

java - 需要 Java 8 中的非预期公历年表(如 org.joda.time.chrono.GJChronology)

android - Joda Time 不工作

Java无法访问NFS共享中的文件

Java GUI编程只重启一次

java - 我有一个 java swing 应用程序,我正在从 ubuntu 上的 RS232 端口读取值。如何将该值显示到框架中的 jlabel 中?

java - 错误 :552 5. 3.4 消息大小超过固定的最大消息大小

java - 意外的时区错误