在jodatime中计算一个月的周数
有可能在jodatime中计算一个月的周数吗?
我需要这样的东西:
月:七月
- 27周的一周; 1-7。 七月
- 28周; 9-14。 七月
- 29周; 16-21。 七月
- 30年周; 23-31。 七月
月:八月
- 31年周; 1-4。 八月
- 32年周; 6-11。 八月
- 33年周; 13-18。 八月
- 34年周; 20-25。 八月
- 35年周; 27-31。 八月
我知道我可以像这样在joda时间获得一周的一周:
new LocalDate().weekOfWeekYear()
但我不知道如何获得相关日期。
要检索一周的范围,只需创建一个指向一周的第一天和最后一天的对象,然后从中拉出一天中的某一天。
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"));
您也可以像这样提取日期:
int weekStart = firstDay.getDayOfMonth(); int weekEnd = lastDay.getDayOfMonth();
然后,您可以使用相同的技术检索一个月内的周数。
int firstWeekInMonth = new LocalDate().withMonthOfYear(month).withDayOfMonth(1).getWeekOfYear(); int lastWeekInMonth = new LocalDate().withMonthOfYear(month).dayOfMonth().withMaximalValue().getWeekOfYear();
可能你可能想限制开始日期和结束日期保持在月份范围内,否则你可能会得到像’30 – 9 Sep’这样的东西。
修复一些变量:
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);
我的解决方案,考虑其他答案
public List> getWeeksInMonth(LocalDate data) { int firstWeekInMonth = data.withDayOfMonth(1).getWeekOfWeekyear(); int lastWeekInMonth = data.dayOfMonth().withMaximumValue().getWeekOfWeekyear(); List> 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 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; } }
我认为这也是每周都能找到的工作
String[] weekDays = {today.withDayOfWeek(DateTimeConstants.MONDAY).getDayOfMonth() +"", today.withDayOfWeek(DateTimeConstants.TUESDAY).getDayOfMonth()+ "", today.withDayOfWeek(DateTimeConstants.WEDNESDAY).getDayOfMonth() + "", today.withDayOfWeek(DateTimeConstants.THURSDAY).getDayOfMonth() + "", today.withDayOfWeek(DateTimeConstants.FRIDAY).getDayOfMonth() +"", today.withDayOfWeek(DateTimeConstants.SATURDAY).getDayOfMonth() +"", today.withDayOfWeek(DateTimeConstants.SUNDAY).getDayOfMonth() +""};