Calendar类就相当于一张日历,这张日历上有一个一个的Date,你可以想象有一个指针指向这张日历上的某个Date。
我们可以用Calendar calendar = Calendar.getInstance();方法得到一个Calendar对象,得到的Calendar对象默认是当天的Date。
下面的代码讲解了各种取得日期,时间,星期的方法:
// 得到Calendar实例对象 Calendar calendar = Calendar.getInstance(); // 目前的日期+时间+星期 System.out.println("Current Date:" + calendar.getTime()); // 本年 System.out.println("Current Year:" + calendar.get(Calendar.YEAR) + "年"); // 本月(注意月份是从0开始的,所以要+1) System.out.println("Current Month:" + (calendar.get(Calendar.MONTH) + 1) + "月"); // 本日 System.out.println("Current Day Of Month:" + calendar.get(Calendar.DAY_OF_MONTH) + "日"); System.out.println("Current Day Of Month:" + calendar.get(Calendar.DATE) + "日"); // 本日在本周中的Index(周日是每个星期的第一天,周日~周六 对应着 1~7) final String[] ARRAY_WEEKS = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); System.out.println("Current Week:" + ARRAY_WEEKS[dayOfWeek - 1]); // 本周在本月中的Index(即本月中的第几周) System.out.println("Current Day Of Week In Month:本月第" + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH) + "周"); // 本日在本年中的Index(即本年中的第几天) System.out.println("Current Day Of Year:本年第" + calendar.get(Calendar.DAY_OF_YEAR) + "日");
运行结果如下:
Current Date:Thu May 03 21:07:02 CST 2012 Current Year:2012年 Current Month:5月 Current Day Of Month:3日 Current Week:星期四 Current Day Of Week In Month:本月第1周 Current Day Of Year:本年第124日
指针默认是指向当天的Date的,那么怎么移动指针到其他的Date呢?
- setTime(Date date)
- set(int year, int month, int date)
- set(int year, int month, int date, int hourOfDay, int minute)
- set(int year, int month, int date, int hourOfDay, int minute, int second)
- set(int field, int value)
- add(int field, int amount)
第1、2、3、4种方法不解释
第5种方法:根据field决定设值方法,请看如下代码
// 设置Calendar的Date为本月第一天 calendar.set(Calendar.DATE, 1); System.out.println("本月第一天的Date:" + calendar.getTime()); // 设置Calendar的Date为本月第一天 calendar.set(Calendar.DAY_OF_MONTH, 1); System.out.println("本月第一天的Date:" + calendar.getTime()); // 设置Calendar的Date为本周第一天 calendar.set(Calendar.DAY_OF_WEEK, 1); System.out.println("本周第一天的Date:" + calendar.getTime());
运行结果如下:
本月第一天的Date:Tue May 01 21:53:09 CST 2012 本月第一天的Date:Tue May 01 21:53:09 CST 2012 本周第一天的Date:Sun Apr 29 21:53:09 CST 2012
第六种方法:在本Date的基础上增加或减少(可以增加减少年,月,日,周,时,分,秒)
// 增加一天 calendar.add(Calendar.DATE, 1); System.out.println("增加一天:" + calendar.getTime()); // 减少一天 calendar.add(Calendar.DATE, -1); System.out.println("减少一天:" + calendar.getTime()); // 增加一小时 calendar.add(Calendar.HOUR, 1); System.out.println("增加一小时:" + calendar.getTime());
想得到今年有多少天,多少周,本月有多少天,多少周怎么办呢?
System.out.println("今年有:" + calendar.getActualMaximum(Calendar.DAY_OF_YEAR) + "天," + calendar.getActualMaximum(Calendar.WEEK_OF_YEAR) + "周"); System.out.println("本月有:" + calendar.getActualMaximum(Calendar.DAY_OF_MONTH) + "天," + calendar.getActualMaximum(Calendar.WEEK_OF_MONTH) + "周");
运行结果如下:
今年有:366天,52周 本月有:31天,5周