感谢您阅读我的内容。
我有一个小问题,我需要知道一周的第一天/最后一天一个月和一年,所以:
public String getFirstDayOfWeekAndMonth(int year, int month, int week){
Calendar weekCalendar = Calendar.getInstance();
weekCalendar.clear();
weekCalendar.set( Calendar.YEAR, year );
weekCalendar.set( Calendar.MONTH, month-1); // zero-based
weekCalendar.set( Calendar.WEEK_OF_YEAR, week );
return... ?
}
例如下一个日历:
Month Week M T W T F S S FirstDay LastDay
1 1 2 3 4 5 1 5
2 6 7 8 9 10 11 12 6 12
1 3 13 14 15 16 17 18 19 13 19
4 20 21 22 23 24 25 26 20 26
5 27 28 29 30 27 30
5 1 2 3 1 3
6 4 5 6 7 8 9 10 4 10
2 7 11 12 13 14 15 16 17 11 17
8 18 19 20 21 22 23 24 18 24
9 25 26 27 28 25 28
9 1 2 3 1 3
3 10 4 5 6 7 8 9 10 4 10
...
我对 2 个月内的星期有疑问(在示例 5 和 9 中)。你能帮帮我吗?
非常感谢。
最佳答案
我推荐使用 brilliant Joda-Time满足您所有计时需求的库(我还建议在您的所有项目中进行标准导入)。
有了这个,一个(不是很干净,但有效的)解决方案是这样的:
public String getFirstDayOfWeekAndMonth(int year, int month, int week) {
DateTime firstDayOfMonth = new DateTime(year, month, 1, 0, 0, 0, 1);
DateTime lastDayOfMonth = new DateTime(year, month, firstDayOfMonth.dayOfMonth().getMaximumValueOverall(), 0, 0, 0, 1);
// european style (MON - SUN)
DateTime firstOfWeek = new DateTime(year, 1, 1, 0, 0, 0, 1).plusWeeks(week - 1).withDayOfWeek(1);
DateTime lastOfWeek = firstOfWeek.withDayOfWeek(7);
int firstDay;
int lastDay;
if(firstOfWeek.isBefore(firstDayOfMonth))
firstDay = firstDayOfMonth.getDayOfMonth();
else
firstDay = firstOfWeek.getDayOfMonth();
if(lastOfWeek.isAfter(lastDayOfMonth))
lastDay = lastDayOfMonth.getDayOfMonth();
else
lastDay = lastOfWeek.getDayOfMonth();
String returner = String.format("%d - %d", firstDay, lastDay);
return returner;
}
我不太明白您为什么要从您的方法中返回一个字符串,但我猜您是有原因的。我只是假定了一种格式,您当然可以根据需要更改它。
关于java - 如何在Java中获取不完整一周的第一天/最后一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7430978/