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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄玉昆 黑马帝   /  2013-2-28 12:38  /  1389 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

练习:
1、获取任意年的二月有多少天:
2、获取前一天的现在这个时刻
3、计算有效上课天数:每周六日不上课,计算任意年从九月到十月的有效上课天数,此处不含节假日

import java.util.*;

class CalendarTest
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
                //测试1
                int n = getFEB(2012);
                sop("2012年2月的天数:" + n);
                //测试2
                String s = getTheTime();
                sop("昨天的现在这个时刻是:" + s);
                sop("-----------------");
                //测试3
                int m = getValDay(2013,1,3);
                sop("有效上课天数:" + m);

        }
        //测试1:创建获取二月的方法
        public static int getFEB(int year)
        {
                Calendar c = Calendar.getInstance();
                //设置任意年的时间为3月1号
                c.set(year,2,1);
                //获取设置后的3月1日,并减去1天,即为二月最后一天
                c.add(Calendar.DAY_OF_MONTH,-1);
                //获取最终设置的日期,即为获取到的二月的天数
                int n = c.get(Calendar.DAY_OF_MONTH);
                return n;
        }

        //测试2:获取前一天的现在这个时刻
        public static String getTheTime()
        {
                //获取时间信息
                Calendar c = Calendar.getInstance();
                //将日期设置为昨天
                c.add(Calendar.DAY_OF_MONTH,-1);
                //获取昨天的现在这个时刻
                int n = c.get(Calendar.DAY_OF_MONTH);
                return n + "日 " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND);
        }

        //测试3:计算有效上课天数
        public static int getValDay(int year,int startMON,int endMON)
        {
                //获取时间信息
                Calendar c = Calendar.getInstance();
                //调用获取天数函数
                int day = getDay(c,year,startMON,endMON);
                sop(" 总天数:" + day);//测试获取的天数
                //初始化星期
                int week = 0;
                //定义计数器
                int count = 0;
                //遍历每天一天,判断是否为周六日,f否的话计数器自增
                for(int i=0;i<day;i++)
                {
                        //必须要先将天数加1再判断,否则到week为6的时候会一直continue,
                        //而且此处也可以避免下面的week是以星期日为第一天的问题
                        c.add(Calendar.DAY_OF_MONTH,1);
                        //获取当前天数的星期
                        week = c.get(Calendar.DAY_OF_WEEK);
                        //sop("星期:" + week);
                        if (week==6 || week==7)
                                continue;
                        count++;
                        //sop("有效天数:" + count);
                }
                return count;
        }
        //获取给定月份的天数
        public static int getDay(Calendar c,int year,int startMON,int endMON)
        {
                //定义天数和变量
                int sum = 0;
                //遍历每个月的天数
                for(int i=0;i<=endMON-startMON;i++)
                {
                        //设定第二个月的第一天,循环一次后设定下个月为处世月,因为0为一月份所以startMON要加1
                        c.set(year,startMON+i,1);
                        //获取前一个月的天数
                        c.add(Calendar.DAY_OF_MONTH,-1);
                        //将每个月的天数累加
                        sum += c.get(Calendar.DAY_OF_MONTH);
                        //循环后,要相应加上i个月
                        c.add(Calendar.MONTH,i+1);
                }
                return sum;
        }
}

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

5 个回复

倒序浏览
看看,谢谢分享
回复 使用道具 举报
  //设置任意年的时间为3月1号
                c.set(year,2,1);
这里的参数为什么是2呢?
回复 使用道具 举报
吴俊旭 发表于 2013-2-28 17:13
//设置任意年的时间为3月1号
                c.set(year,2,1);
这里的参数为什么是2呢? ...

因为0是第一个月份,所以2就是第三个月份了,这和数组的角标是一样的。
回复 使用道具 举报
黄玉昆 发表于 2013-2-28 18:54
因为0是第一个月份,所以2就是第三个月份了,这和数组的角标是一样的。

哦,差点忘了,谢谢
回复 使用道具 举报
看看~~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马