第五部分 自定义的Calendar接口示例

这些接口在写日历程序时可能会用到。
源代码如下(CalendarSelfDefineTest.java):

import java.util.Calendar;
 
/**
 * 根据Calendar的API封装的一些常用函数
 */
public class CalendarSelfDefineTest {
 
 public static void main(String[] args) {
 Calendar cal = Calendar.getInstance();
 
 // 设置日期为“2013-09-18”
 cal.set(2013, Calendar.SEPTEMBER, 18);
 
 // 获取“年”
 System.out.printf("year: %s\n", getYear(cal) );
 // 获取“月”
 System.out.printf("month: %s\n", getMonth(cal) );
 // 获取“上月”
 System.out.printf("previcou month: %s\n", getLastMonth(cal) );
 // 获取“下月”
 System.out.printf("next month: %s\n", getNextMonth(cal) );
 // 获取“日”
 System.out.printf("day: %s\n", getDay(cal) );
 // 获取Cal对应星期几
 System.out.printf("weekday: %s\n", getWeekDay(cal) );
 // 本月天数
 System.out.printf("Current Month days: %s\n", getMonthDays(cal) );
 // 上月天数
 System.out.printf("Previcous Month days: %s\n", getPrevMonthDays(cal) );
 // 下月天数
 System.out.printf("Next Month days: %s\n", getNextMonthDays(cal) );
 // 获取当月第一天的星期几
 System.out.printf("First day' weekday : %s\n", getFirstDayWeekday(cal) );
 // 获取当前月最后一天的星期几
 System.out.printf("Last day' weekday : %s\n", getLastDayWeekday(cal) );
 // 获取上月最后一天的星期几
 System.out.printf("PrevMonth Last day' weekday: %s\n", getLastDayWeekdayOfPrevMonth(cal) );
 // 获取下月第一天的星期几
 System.out.printf("NextMonth First day' weekday: %s\n", getFirstDayWeekdayOfNextMonth(cal) );
 }
 
 /**
 * 获取“年”
 * 
 * @return 例如,2013-09-18,则返回2013
 */
 public static int getYear(Calendar cal) {
 return cal.get(Calendar.YEAR);
 } 
 
 /**
 * 获取“月”
 * 
 * @return 返回值可以为以下值:
 * JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER, UNDECIMBER。
 * 其中第一个月是 JANUARY,它为 0。
 *
 * 例如,2013-09-18,则返回8
 */
 public static int getMonth(Calendar cal) {
 return cal.get(Calendar.MONTH);
 } 
 
 /**
 * 获取“上一个月”
 * 
 * @return 返回值可以为以下值:
 * JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER, UNDECIMBER。
 * 其中第一个月是 JANUARY,它为 0。
 *
 * 例如,2012-01-12的上一个月是“11”(即DECEMBER)。
 */
 public static int getLastMonth(Calendar cal) {
 return (cal.get(Calendar.MONTH) + 11) % 12;
 } 
 
 /**
 * 获取“下一个月”
 * 
 * @return 返回值可以为以下值:
 * JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER, UNDECIMBER。
 * 其中第一个月是 JANUARY,它为 0。
 *
 * 例如,2013-12-12的下一个月是“1”(即DECEMBER)。
 */
 public static int getNextMonth(Calendar cal) {
 return (cal.get(Calendar.MONTH) + 13) % 12;
 } 
 
 /**
 * 获取“日”
 *
 * @return 例如,2013-09-18,则返回18
 *
 */
 public static int getDay(Calendar cal) {
 return cal.get(Calendar.DATE);
 } 
 
 /**
 * 获取“本月的天数”
 *
 * @return 例如,2013-09-18,则返回30
 *
 */
 public static int getMonthDays(Calendar cal) {
 return cal.getActualMaximum(Calendar.DATE); 
 } 
 
 /**
 * 获取“上一个月的天数”
 *
 * @return 例如,2013-01-18,则返回31 (因为2012-12有31天)
 *
 */
 public static int getPrevMonthDays(Calendar cal) {
 Calendar tmpCal = (Calendar)cal.clone(); // 克隆cal。后面对tmpCal操作,就不会改变cal
 tmpCal.add(Calendar.MONTH, -1);   // 设为“上一个月”
 return tmpCal.getActualMaximum(Calendar.DATE); 
 } 
 
 /**
 * 获取“下一个月的天数”
 *
 * @return 例如,2013-12-18,则返回31 (因为2014-01有31天)
 *
 */
 public static int getNextMonthDays(Calendar cal) {
 Calendar tmpCal = (Calendar)cal.clone(); // 克隆cal。后面对tmpCal操作,就不会改变cal
 tmpCal.add(Calendar.MONTH, 1);   // 设为“下一个月”
 return tmpCal.getActualMaximum(Calendar.DATE); 
 } 
 
 /**
 * 获取Cal对应星期几
 *
 * @return 返回“星期几”,可以为以下值:
 * SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 和 SATURDAY。
 * SUNDAY为1,MONDAY为2,依次类推。
 * 例如,2013-09-18(星期三),则返回4
 */
 public static int getWeekDay(Calendar cal) {
 return cal.get(Calendar.DAY_OF_WEEK);
 } 
 
 
 /**
 * 获取当月第一天对应星期几
 *
 * @return SUNDAY为1,MONDAY为2,依次类推。
 */
 public static int getFirstDayWeekday(Calendar cal) {
 
 Calendar tmpCal = (Calendar)cal.clone(); // 克隆cal。后面对tmpCal操作,就不会改变cal
 tmpCal.set(Calendar.DATE, 1);   // 把日期设置为当月第一天 
 return tmpCal.get(Calendar.DAY_OF_WEEK);
 } 
 
 /**
 * 获取当前月最后一天对应星期几
 * 
 * @return SUNDAY为1,MONDAY为2,依次类推。
 */
 public static int getLastDayWeekday(Calendar cal) {
 Calendar tmpCal = (Calendar)cal.clone(); // 克隆cal。后面对tmpCal操作,就不会改变cal
 tmpCal.set(Calendar.DATE, 1);   // 把日期设置为当月第一天 
 tmpCal.roll(Calendar.DATE, -1);   // 把日期设置为当月最后一天 
 return tmpCal.get(Calendar.DAY_OF_WEEK);
 } 
 
 
 /**
 * 获取上月最后一天的星期几
 * 
 * @return SUNDAY为1,MONDAY为2,依次类推。
 */
 public static int getLastDayWeekdayOfPrevMonth(Calendar cal) {
 
 Calendar tmpCal = (Calendar)cal.clone(); // 克隆cal。后面对tmpCal操作,就不会改变cal
 tmpCal.set(Calendar.DATE, 1);   // 把日期设置为当月第一天 
 tmpCal.add(Calendar.DATE, -1);   // 把日期设置为上一个月最后一天 
 return tmpCal.get(Calendar.DAY_OF_WEEK);
 } 
 
 /**
 * 获取下月第一天的星期偏移
 * 
 * @return SUNDAY为1,MONDAY为2,依次类推。
 */
 public static int getFirstDayWeekdayOfNextMonth(Calendar cal) {
 
 Calendar tmpCal = (Calendar)cal.clone(); // 克隆cal。后面对tmpCal操作,就不会改变cal
 tmpCal.add(Calendar.MONTH, 1);   // 设为“下一个月”
 tmpCal.set(Calendar.DATE, 1);   // 设为“第一天” 
 return tmpCal.get(Calendar.DAY_OF_WEEK);
 } 
}
 

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值