A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 coolmiao13 于 2015-2-25 00:07 编辑

今天看完毕老师的关于时间类的视频,
自己动手写了一下关于取得范围时间段营业日的程序,发现死循环了,求助。
问题已解决!
问题代码:
  1. package ch01;

  2. import java.util.Calendar;
  3. /*需求:获取任意一年的二月的天数
  4. *需求2:获取前一天现在的时刻。
  5. *需求3:获取范围时间的营业日(不算周末)
  6. * */
  7. public class dateDemo {
  8.     public static void main (String[]args){
  9.         //MyDateOf2M(2015);
  10.         //MyDateBeforeDay();
  11.         int a = myDate(2015,1,13,2015,2,15);
  12.         System.out.println(a);
  13.     }
  14.     //需求1
  15.     public static void MyDateOf2M(int year){
  16.         Calendar c = Calendar.getInstance();
  17.         c.set(year,2,1 );
  18.         c.add(Calendar.DAY_OF_MONTH, -1);
  19.         System.out.println(c.get(Calendar.DAY_OF_MONTH));
  20.     }
  21.     //需求2
  22.     public static void MyDateBeforeDay(){
  23.         Calendar c = Calendar.getInstance();
  24.         //c.add(Calendar.DAY_OF_MONTH, -1);
  25.         System.out.println(c.get(Calendar.YEAR)+"年"+
  26.                             (c.get(Calendar.MONTH)+1)+"月"+
  27.                             c.get(Calendar.DATE)+"日"+
  28.                             c.get(Calendar.HOUR_OF_DAY)+":"+
  29.                             c.get(Calendar.MINUTE)+":"+
  30.                             c.get(Calendar.SECOND));
  31.     }
  32.     //需求3
  33.     //获取范围时间的营业日(不算周末)
  34.     public static int myDate(int ... date){
  35.         //处理传入的参数
  36.         if (!(date.length==6)){
  37.             throw new ArrayIndexOutOfBoundsException("输入的时间不对");
  38.         }
  39.         Calendar c = Calendar.getInstance();
  40.         //月份减1,输入的月份与电脑的月份有区别。
  41.         date[1]--;
  42.         date[4]--;
  43.         //将头时间设置进Calendar对象
  44.         c.set(date[0], date[1],date[2]);
  45.         //取得年月日时间
  46.         int year = c.get(Calendar.YEAR);
  47.         int mon = c.get(Calendar.MONTH);   
  48.         int day = c.get(Calendar.DAY_OF_MONTH);
  49.         int count = 0;
  50.         //当前后参数时间相等跳出循环
  51.         while (!((year==date[3])&&(mon==date[4])&&(day==date[5]))){
  52.             //周六日增加天数,不增加count数
  53.             if((c.get(Calendar.WEDNESDAY)==6)||
  54.                     (c.get(Calendar.WEDNESDAY)==1)){
  55.                 c.add(Calendar.DAY_OF_MONTH, 1);
  56.                 continue;
  57.             }
  58.             //增加天数和count数
  59.             c.add(Calendar.DAY_OF_MONTH, 1);
  60.             count++;
  61.         }
  62.         //返回统计的时间
  63.         return count;
  64.     }
  65. //方便调试写的输入当前Calendar 对象的时间。
  66. public static void printDate(Calendar c){
  67.         System.out.println(c.get(Calendar.YEAR)+"年"+
  68.                 (c.get(Calendar.MONTH)+1)+"月"+
  69.                 c.get(Calendar.DATE)+"日"+
  70.                 c.get(Calendar.HOUR_OF_DAY)+":"+
  71.                 c.get(Calendar.MINUTE)+":"+
  72.                 c.get(Calendar.SECOND));
  73.     }
  74. }
复制代码
经过半个小时的努力,问题解决:
代码:
  1. package ch01;

  2. import java.util.Calendar;
  3. /*需求:获取任意一年的二月的天数
  4. *需求2:获取前一天现在的时刻。
  5. *需求3:获取范围时间的营业日(不算周末)
  6. * */
  7. public class dateDemo {
  8.     public static void main (String[]args){
  9.         //MyDateOf2M(2015);
  10.         //MyDateBeforeDay();
  11.         int a = myDate(2015,1,13,2015,1,18);
  12.         System.out.println(a);
  13.     }
  14.     //需求1
  15.     public static void MyDateOf2M(int year){
  16.         Calendar c = Calendar.getInstance();
  17.         c.set(year,2,1 );
  18.         c.add(Calendar.DAY_OF_MONTH, -1);
  19.         System.out.println(c.get(Calendar.DAY_OF_MONTH));
  20.     }
  21.     //需求2
  22.     public static void MyDateBeforeDay(){
  23.         Calendar c = Calendar.getInstance();
  24.         //c.add(Calendar.DAY_OF_MONTH, -1);
  25.         System.out.println(c.get(Calendar.YEAR)+"年"+
  26.                             (c.get(Calendar.MONTH)+1)+"月"+
  27.                             c.get(Calendar.DATE)+"日"+
  28.                             c.get(Calendar.HOUR_OF_DAY)+":"+
  29.                             c.get(Calendar.MINUTE)+":"+
  30.                             c.get(Calendar.SECOND));
  31.     }
  32.     //需求3
  33.     //获取范围时间的营业日(不算周末)
  34.    
  35.     public static int myDate(int ...date){
  36.         //处理传入的参数
  37.         if (!(date.length==6)){
  38.             throw new ArrayIndexOutOfBoundsException("输入的时间不对");
  39.         }
  40.         Calendar c = Calendar.getInstance();
  41.         //月份减1,输入的月份与电脑的月份有区别。
  42.         date[1]--;
  43.         date[4]--;
  44.         //将头时间设置进Calendar对象
  45.         c.set(date[0], date[1],date[2]);
  46.         int count =0;
  47.         //当前后参数时间相等跳出循环
  48.         while (!((c.get(Calendar.YEAR)==date[3])&&
  49.                 (c.get(Calendar.MONTH)==date[4])&&
  50.                 (c.get(Calendar.DAY_OF_MONTH)==date[5]))){
  51.             //周六日增加天数,不增加count数
  52.             if((c.get(Calendar.WEDNESDAY)==6)||
  53.                     (c.get(Calendar.WEDNESDAY)==1)){
  54.                 c.add(Calendar.DAY_OF_MONTH, 1);
  55.                 continue;
  56.             }
  57.             //增加天数和count数
  58.             c.add(Calendar.DAY_OF_MONTH, 1);
  59.             count++;
  60.         }
  61.         //返回统计的时间
  62.         return count;
  63.     }
  64.     public static void printDate(Calendar c){
  65.         System.out.println(c.get(Calendar.YEAR)+"年"+
  66.                 (c.get(Calendar.MONTH)+1)+"月"+
  67.                 c.get(Calendar.DATE)+"日"+
  68.                 c.get(Calendar.HOUR_OF_DAY)+":"+
  69.                 c.get(Calendar.MINUTE)+":"+
  70.                 c.get(Calendar.SECOND));
  71.     }
  72. }

复制代码
因为在取得year,mon,day变数的时候是初始化的状态,放到循环中并不会因为定义而进行改变。
只能用老长的Calendar函数来写进循环条件,问题搞定。



评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 加油~

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马