首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jodatime计算一个月的周数

在jodatime计算一个月的周数
EN

Stack Overflow用户
提问于 2012-08-08 13:04:20
回答 4查看 4.5K关注 0票数 7

在乔达蒂姆能计算一个月的周数吗?

我需要这样的东西:

月:7月

  • 27周;1-7周。七月
  • 28周;9-14周。七月
  • 29周;16-21周。七月
  • 30周;23-31周。七月

月:8月

  • 第31周;第1-4周。8月
  • 32周;6-11周。8月
  • 33周;13-18周。8月
  • 34周;20-25周。8月
  • 35周;27-31周。8月

我知道在乔达时间,我可以得到这样的一年中的一周:

new LocalDate().weekOfWeekYear()

但我不知道如何得到相关的日期。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-08 13:19:47

要检索一周的范围,只需创建一个指向一周的第一天和最后一天的对象,然后从其中提取月份的日期。

代码语言:javascript
复制
int weekOfYear = 32;

LocalDate firstDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(1);
LocalDate lastDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(7);

System.out.println("Week of Year "+weekOfYear+"; "+firstDay.toString("d MMM")+" - "+lastDay.toString("d MMM"));

您还可以提取这样的一天:

代码语言:javascript
复制
int weekStart = firstDay.getDayOfMonth();
int weekEnd = lastDay.getDayOfMonth();

然后,您也可以使用同样的技术来检索一个月中的几个星期。

代码语言:javascript
复制
int firstWeekInMonth = new LocalDate().withMonthOfYear(month).withDayOfMonth(1).getWeekOfYear();
int lastWeekInMonth = new LocalDate().withMonthOfYear(month).dayOfMonth().withMaximalValue().getWeekOfYear();

也许你想把开始日期和结束日期限制在这个月的范围内,否则你可能会得到类似“30-5九月”之类的东西。

票数 10
EN

Stack Overflow用户

发布于 2013-03-14 18:40:08

修正一些变量:

代码语言:javascript
复制
int weekOfYear = 32;

LocalDate firstDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(1);
LocalDate lastDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(6);

int weekStart = firstDay.getDayOfMonth();    
int weekEnd = lastDay.getDayOfMonth();

System.out.println("Week of Year "+weekOfYear+"; "+weekStart+"-"+weekEnd+" "+month);
票数 1
EN

Stack Overflow用户

发布于 2015-06-10 02:26:45

我的解决方案,考虑到其他的答案

代码语言:javascript
复制
 public List<Pair<LocalDate, LocalDate>> getWeeksInMonth(LocalDate data) {

        int firstWeekInMonth = data.withDayOfMonth(1).getWeekOfWeekyear();
        int lastWeekInMonth = data.dayOfMonth().withMaximumValue().getWeekOfWeekyear();

        List<Pair<LocalDate, LocalDate>> weeks = new cicero.minhasfinancas.util.array.ArrayList<>();
        while (firstWeekInMonth <= lastWeekInMonth) {

            LocalDate firstDay = new LocalDate().withWeekOfWeekyear(firstWeekInMonth).withDayOfWeek(1);
            LocalDate lastDay = new LocalDate().withWeekOfWeekyear(firstWeekInMonth).withDayOfWeek(7);
            weeks.add(new Pair<>(firstDay, lastDay));
            firstWeekInMonth++;
        }

        return weeks;
    }

    public class Pair<V1, V2>{

        V1 first;
        V2 second;

        public Pair(V1 first, V2 second) {
            this.first = first;
            this.second = second;
        }

        public V1 getFirst() {
            return first;
        }

        public void setFirst(V1 first) {
            this.first = first;
        }

        public V2 getSecond() {
            return second;
        }

        public void setSecond(V2 second) {
            this.second = second;
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11865123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档