题目:计算出这是今年的第几天,第几周,星期几
代码实现:
public class TestTime {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date(System.currentTimeMillis());
count(sdf.format(date));
}
private static void count(String str) {
// TODO Auto-generated method stub
int allDay = 0; // 用来叠加总天数
int totalDay = 0; // 总天数
int week = 0; // 第几周
int mday = 0; // 每个月对应的天数
String weekDay = null; // 星期几
int year = Integer.valueOf(str.substring(0, 4));
int month = Integer.valueOf(str.substring(5, 7));
int day = Integer.valueOf(str.substring(8, 10));
totalDay = CalculateAllDay(year,month,day,allDay,mday);
week = CalculateWeek(totalDay,week);
weekDay = CalculateWeekDay(year,month,day,weekDay);
System.out.println("这是"+year+"年的"+ totalDay +"天" + ",第"+ week +"周" + ",星期"+ weekDay);
}
// 总天数
private static int CalculateAllDay(int year, int month, int day,int allDay,int mday) {
// TODO Auto-generated method stub
for(int i=1;i<month;i++) {
switch(i) {
case 1:case 3:case 5:case 7:case 8:case 10:case 12:{
mday = 31;
break;
}
case 4:case 6:case 9:case 11:{
mday = 30;
break;
}
case 2:{
if( (year%4==0) && (year%100!=0 || year%400==0)) {
mday = 29;
}else {
mday = 28;
}
break;
}
default:
break;
}
allDay+=mday;
}
return allDay+day;
}
// 总周数
private static int CalculateWeek(int totalDay,int week) {
// TODO Auto-generated method stub
if(totalDay%7==0) {
week = totalDay/7;
}else {
week = totalDay/7+1;
}
return week;
}
// 星期几
private static String CalculateWeekDay(int y, int m, int d,String weekDay) {
// TODO Auto-generated method stub
if(m==1 || m==2) {
m+=12;
y--;
}
int iWeek = (d+2*m+3*(m+1)/5+y+ y/4-y/100+y/400)%7; //
switch(iWeek) {
case 0:weekDay="一";break;
case 1:weekDay="二";break;
case 2:weekDay="三";break;
case 3:weekDay="四";break;
case 4:weekDay="五";break;
case 5:weekDay="六";break;
case 6:weekDay="日";break;
}
return weekDay;
}
}
Tip:代码有点长,有点乱,但理解应该很容易的
结果演示: