import java.util.Calendar
public class DataTest {
public static void main(String[] args) {
printWeekdays()
}
private static final int FIRST_DAY = Calendar.MONDAY
private static void printWeekdays() {
Calendar calendar = Calendar.getInstance()
setToFirstDay(calendar)
for (int i = 0 i < 7 i++) {
printDay(calendar)
calendar.add(Calendar.DATE, 1)
}
}
private static void setToFirstDay(Calendar calendar) {
while (calendar.get(Calendar.DAY_OF_WEEK) != FIRST_DAY) {
calendar.add(Calendar.DATE, -1)
}
}
private static void printDay(Calendar calendar) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd EE")
System.out.println(dateFormat.format(calendar.getTime()))
}
}
/*** 获取上周五时间
*/
public Date lastFirday() {
Calendar calendar = Calendar.getInstance()
while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
calendar.add(Calendar.DAY_OF_WEEK, -1)
}
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1
int offset = 7 - dayOfWeek
calendar.add(Calendar.DATE, offset - 9)
return DateTimeUtil.getFirstDayOfWeek(calendar.getTime(), 6)//这是从上周日开始数的到本周五为6
}
/**
* 获取上周一时间
*/
public Date lastMonday() {
Calendar calendar = Calendar.getInstance()
while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
calendar.add(Calendar.DAY_OF_WEEK, -1)
}
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1
int offset = 1 - dayOfWeek
calendar.add(Calendar.DATE, offset - 7)
return DateTimeUtil.getFirstDayOfWeek(calendar.getTime(), 2)
}
参考
请采纳,谢谢
思路:首先是获取该月的实际天数,然后从1号遍历直至该月最后一天,利用Calendar类找出该日是一周中的第几天,(1)若该日是周日,则视为一周结束,并用该日期减去6找到该周的开始日期,若相减结果小于等于1,则说明该周起始日期应该是本月1号。
(1)若该日不是周日,且是该月最后一天,则应该在上面计算的基础上再加一周,视月末为该周的结束日,该周起始日期应为改日期减去改日
在一周中的位置加2,例如:2013-09-30号是周一,则视为9月份中的第六周,开始日期是30-2+2
提示:Calendar 类中视周日为一周的开始,值是1
示例代码:
[java] view plain copy
public static void printfWeeks(String date) throws Exception {
// String date = "2013-09"
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM")
Date date1 = dateFormat.parse(date)
Calendar calendar = new GregorianCalendar()
calendar.setTime(date1)
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
System.out.println("days:" + days)
int count = 0
for (int i = 1i <= daysi++) {
DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd")
Date date2 = dateFormat1.parse(date + "-" + i)
calendar.clear()
calendar.setTime(date2)
int k = new Integer(calendar.get(Calendar.DAY_OF_WEEK))
if (k == 1) {// 若当天是周日
count++
System.out.println("-----------------------------------")
System.out.println("第" + count + "周")
if (i - 6 <= 1) {
System.out.println("本周开始日期:" + date + "-" + 1)
} else {
System.out.println("本周开始日期:" + date + "-" + (i - 6))
}
System.out.println("本周结束日期:" + date + "-" + i)
System.out.println("-----------------------------------")
}
if (k != 1 &&i == days) {// 若是本月最好一天,且不是周日
count++
System.out.println("-----------------------------------")
System.out.println("第" + count + "周")
System.out.println("本周开始日期:" + date + "-" + (i - k + 2))
System.out.println("本周结束日期:" + date + "-" + i)
System.out.println("-----------------------------------")
}
}
}
测试代码:
[java] view plain copy
public static void main(String[] args) throws Exception {
String s = "2013-"
for (int i = 1i <= 12i++) {
System.out.println("*******************************************")
System.out.println("月份:" + i)
printfWeeks(s + i)
System.out.println("*******************************************")
}
//printfWeeks(s + 2)
}