Calendar自己编写日历控件 并且能编写自己日程。

项目开发中遇到一个 课程表安排的需求,就是现实当前月,点击某一天时可以看到这一天的课表并且可以可以安排这一天的行程。

代码如下:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.sarnath.privateweb.pojo.CoursePlan;
public class CalendarUtil {
 private static int[] [] weekArr=new int[6][7];//定义一个六行七列数组用于存放日期
 private static Calendar calendar=Calendar.getInstance();
 private static int theday=1;//一号位第几天
 private static int daysInMonth=20;//一天中一共有多少条 此处默认值无意义
 public static String getCanlendar(int year,int month,int day,Map map){
  theday=1;
  String titleArr[]=new String[]{"周日","周一","周二","周三","周四","周五","周六"};
  calendar.set(year, month-1, 1);
  System.out.println(calendar.get(Calendar.YEAR));
  System.out.println(calendar.get(Calendar.MONTH));
  switch (calendar.get(Calendar.MONTH)+1) {
  case 1:
   daysInMonth = 31;
   break;
  case 2://判断是否是闰年
   if ((year % 4 == 0 && year % 100 != 0) || year % 100 == 0
     && year % 400 == 0) {
    daysInMonth = 29;
    break;
   } else {
    daysInMonth = 28;
    break;
   }
  case 3:
   daysInMonth = 31;
   break;
  case 4:
   daysInMonth = 30;
   break;
  case 5:
   daysInMonth = 31;
   break;
  case 6:
   daysInMonth = 30;
   break;
  case 7:
   daysInMonth = 31;
   break;
  case 8:
   daysInMonth = 31;
   break;
  case 9:
   daysInMonth = 30;
   break;
  case 10:
   daysInMonth = 31;
   break;
  case 11:
   daysInMonth = 30;
   break;
  case 12:
   daysInMonth = 31;
   break;

  }//判断一号位一星期的第几天
  int index=calendar.get(Calendar.DAY_OF_WEEK)-1;
  for(int i=index;i<7;i++){
   weekArr[1][i]=theday++;
  }
  for(int i=2;i<6;i++){
   for(int j=0;j<7;j++){
    if(theday==daysInMonth+1){
     break;
    }
    weekArr[i][j]=theday++;
    
   }
  }
  //遍历日期
  StringBuffer sb=new StringBuffer();
  sb.append("");
  sb.append("");
  for (int i = 0; i < titleArr.length; i++) {
   sb.append("");
   System.out.print(titleArr[i] + "\t");
   
   sb.append(titleArr[i]);
   sb.append("");
   
  }
  sb.append(""); 
  System.out.print("\n");
  for(int i=1;i    sb.append("");
   for(int j=0;j     if(weekArr[i][j]==day){
     sb.append("");
    }else{
     sb.append("");
    }
    
    if(weekArr[i][j]!=0){
    sb.append(weekArr[i][j]+"
");
    Object object=map.get(year+"-"+month+"-"+weekArr[i][j]);
    if(object!=null){
     CoursePlan cp=(CoursePlan)object;
     sb.append("当前时间为"+cp.getCourDate()+"
当前课程为:"+cp.getCourseId()+"
当前老师为:"+cp.getTeacherId());
    }
    
    System.out.print(weekArr[i][j]+ "\t");
    }
    sb.append("");
   }
   sb.append("");
   System.out.print("\n");
  }
  sb.append("");
  sb.append("");
  sb.append("当前时间为:"+year+"年"+month+"月"+day+"日");
  sb.append("");
  sb.append("");
  return sb.toString();
 }

 //根据一天得到这一周的日期
 public static List dateToWeek(Date mdate) { 
      Calendar calendar=Calendar.getInstance();
      calendar.setTime(mdate);
      int b=calendar.get(Calendar.DAY_OF_WEEK);
      Date fdate; 
      List list = new ArrayList(); 
     Long fTime = mdate.getTime() - b * 24 * 3600000; 
      for (int a = 1; a <= 7; a++) { 
          fdate = new Date(); 
         fdate.setTime(fTime + (a * 24 * 3600000)); 
          list.add(a-1, fdate); 
         
      } 
      return list; 
  } 

public static void main(String args[]) throws ParseException{
 List dlist=dateToWeek(new SimpleDateFormat("yyyy-MM-dd").parse("2013-07-17"));
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd EEE"); 
 for(Date d:dlist){
  System.out.println(sdf.format(d));
 }
}
}

Service层代码

public String getDateMap(int month,int year,int day) {
  Map map=new HashMap();
  Calendar calendar=Calendar.getInstance();
  calendar.set(year, month, 0);
  SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
  int totelDays=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
  for(int i=1;i    try{
   Date date=format.parse(year+"-"+month+"-"+(i));
   List cplist=cpDao.getCpByDate(date, 1);
   if(cplist!=null&&!cplist.isEmpty()){
    map.put(year+"-"+month+"-"+i,cplist.get(0));
   }
   }catch(Exception e){
    e.printStackTrace();
   }
  }
  return CalendarUtil.getCanlendar(year, month, day, map);
 }
Action层代码

private ICoursePlanService cpService;
 public String getCan(){
  int year=Calendar.getInstance().get(Calendar.YEAR);
  int month=Calendar.getInstance().get(Calendar.MONTH)+1;
  int day=Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
  String can=cpService.getDateMap(month, year, day);
  ServletActionContext.getRequest().setAttribute("can",can);
  return "success";
 }

jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>



 
   
   
    My JSP 'index.jsp' starting page
 
 
    
 
 
 
 
  

 

   
 
       

<%out.print(request.getAttribute("can")); %>
  
 

 

 

你可能感兴趣的:(Calendar自己编写日历控件 并且能编写自己日程。)