比如我有一个list ,list里面有date型数据,需要将数据每月和每星期进行显示;  即一些星期对应相应的数据  我现在将数据库中一个月的数据查出来了,但是 查出来的数据 要如何进行分星期显示?  请问各位大侠,有碰到过类似问题没??   我写了总是出了错误。  请各位大侠指点迷津。。谢谢~~~  我用的是struts+hibernate....  

解决方案 »

  1.   

    list里面的应该就是内存,不是数据库哦-。-
    首先你查询出来的数据肯定是有时间记录一个月什么时候生成的这条记录的吧?然后在数据库查询的时候就可以直接按照你的要求分了,具体就和火龙果说的一样,三个不知道不晓得怎么回答你另外如果你把数据全部查询出来的话,那不要放到List里面了,放到Map里面
    key是Date类型,value就是数据库中的一条数据
    然后自己写个处理方法
    具体思路就是,获取的数据中当月第一条数据的Date用date.getDate获取是第几天赋值给x,然后把Map的keySet拿到,遍历for(Date d:map.keySet){
    switch (d.getDate-x)/7) {
    case 0: System.out.println("第一周");break;
    case 1: System.out.println("第二周");break;
    case 2: System.out.println("第三周");break;
    case 3: System.out.println("第四周");break;
    case 4: System.out.println("第五周");break;
    default:break;
    }
    }
      

  2.   


     我用的数据库是oracle呢。。
     
     语句如下,这样可以查询出一个月的数据,其中yyyy和mm是根据传递的参数进行查询的,其实可以简单的把语句缩写:
    select datatime from Tb_Plan_Info  
    where  to_char(datatime , 'yyyy-mm') = to_char(SYSDATE, 'yyyy-mm');整体的如下:
     select distinct pi.online_Course_Name,
                    pi.teacher_Id,
                    pi.lesson_Time,
                    ci.course_Name,
                    ci.course_Type,
                    pi.online_Class_Id,
                    pi.state,
                    pi.re,
                    pi.allow_Seat_Count,
                    to_char(pi.lesson_time, 'yyyy-mm-dd hh24:mi:ss'),
                    count(distinct(oi.student_Id))
      from Tb_Course_Plan_Info pi, Tb_Course_Info ci, Tb_Seat_Order_Info oi
     where pi.course_Id = ci.course_Id
       and pi.state != '5'
       and pi.del = 0
       and ci.del = 0
       and oi.del = 0
      and to_char(pi.lesson_time, 'mm') = to_char(SYSDATE, 'mm')
      and to_char(pi.lesson_time, 'yyyy') = to_char(SYSDATE, 'yyyy')
     group by to_char(pi.lesson_time, 'mm'),
              pi.online_Course_Name,
              pi.teacher_Id,
              pi.lesson_Time,
              ci.course_Name,
              ci.course_Type,
              pi.online_Class_Id,
              pi.state,
              pi.re,
              pi.allow_Seat_Count
     order by pi.lesson_Time desc; 谢谢各位了~~
     
      

  3.   

    用Java的calendar这个类来实现,这个是我做日记本系统的一部分代码:Calendar thisMonth=Calendar.getInstance();
    if(month!=null&&(!month.equals("null")))thisMonth.set(Calendar.MONTH,Integer.parseInt(month));
    if(year!=null&&(!year.equals("null")))thisMonth.set(Calendar.YEAR,Integer.parseInt(year));
    thisMonth.setFirstDayOfWeek(Calendar.SUNDAY);
    thisMonth.set(Calendar.DAY_OF_MONTH,1);
    int firstIndex=thisMonth.get(Calendar.DAY_OF_WEEK)-1;
    int maxIndex=thisMonth.getActualMaximum(Calendar.DAY_OF_MONTH);
    for(int i=0;i<maxIndex;i++){
    days[firstIndex+i]=String.valueOf(i+1);
    这个是在页面上打印日历,你可以添加判断来显示每周信息- -!或者直接以日历形式显示,用户鼠标放到日历的某个日期时,就用jQuery把数据淡出。(这个是我做日记本的流程~~)
      

  4.   

    plsql去做,这种操作不要用jdbc,效率低很多,你数据量大了就知道为什么了
    至于怎么分周,其实plsql也好jdbc也好思路都是一样的
      

  5.   

    你的list 里面放的是对象还是直接放的基本类型的数据啊,按周分的话,你应该在查询时的where 子句里面就应该限定好了,如查用的是hibernate 你对应的字段也要加入查询条件的。
      

  6.   


    放的是对象呢,
      我想知道如何进行限定? 如果是按星期进行分组查询,麻烦给示例~~ 多谢了~~
     
    现在 有一个解决方案就是根据每月的第一天是星期几在JSP进行判断,将后面一个星期的数据 与 list里的数据比对,如果位于该星期就显示;   但是如果可以在数据库中还可以将该月信息进行分组,就更好~ 多谢多谢~~ 
      

  7.   

    具体代码我不写了,给你思路
    首先获得你传递进去的月的第一天是周几,然后根据周几来计算第一周有几天
    比方说 1月1号是周一话第一周是6天,如果是周六的话就是一天
    例如1号是周一,那么7号就是周日,就是第二个礼拜了
    也就是说这个月所有的日期是第几个礼拜是这么算的
    如果日期>=7 <14的话就是第二个礼拜
    >=14 <21  就是第三个礼拜
    >=21 <28 第四个礼拜
    其他都是第五个礼拜了
    把上面的逻辑整理成where 后面的表达式,做个视图不就好了,第一 第二 第三 第四个礼拜
    然后你只要直接查询每周对应的视图就可以了