Calendar类常用方法,获取每月最大天数

本文介绍 Java 中 Calendar 类的使用方法,包括如何初始化 Calendar 对象、设置时间、获取日期时间组件等,并提供了一些实用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Calendar类

平时用到时间戳主要是用java.sql.Timestamp这个类,但是Timestamp获取年月日时分秒的方法现在都标注不推荐了,为了防止官方哪天突然给他删了,可以用Calendar类做一些替代操作。

Calendar对象初始化

Calendar cal = Calendar.getInstance(); // 返回一个基于当前时间和默认时区、区域设置的日历对象

日历一般配合时间戳使用,所以还需要设置时间

cal.setTime(timestamp);           //这里的timestamp可以是任意一个Date格式的对象

这个方法的本质是把timestamp的毫秒数赋给cal,所以以下操作可以达到相同效果

cal.setTimeInMillis(timestamp.getTime());

Calendar对象常用方法

//获取时间
Date time = cal.getTime();//date=Sun Jan 27 16:27:27 CST 2019

//获取年
int year = cal.get(Calendar.YEAR);						//year=2019

//获取月份 Calendar.MONTH从0开始(1月是0,12月是11) ,使用时通常会+1
int month = cal.get(Calendar.MONTH) + 1;				//month=1

//获取当前是本月的第多少天:两种方法等价
int day_of_month = cal.get(Calendar.DAY_OF_MONTH);		//day_of_month=27
int day = cal.get(Calendar.DATE);  						//day=27

//获取当月天的最大值,即当月有多少天
int max_day_of_month = cal.getActualMaximum(Calendar.DAY_OF_MONTH);	//max_day_of_month=31

//获取当前小时(24小时制)
int hour24 = cal.get(Calendar.HOUR_OF_DAY);				//hour24=16
//12小时制
int hour12 = cal.get(Calendar.HOUR); 					//hour12=4

//获取当前:分钟
int minute = cal.get(Calendar.MINUTE);   				//minute=27

//当前秒
int second = cal.get(Calendar.SECOND);  				//second=27

//星期几:用数字(1~7)表示(星期日~星期六),使用时通常会-1
int day_of_week = cal.get(Calendar.DAY_OF_WEEK) - 1;	//day_of_week=0

//上午-0;下午-1
int amOrPm = cal.get(Calendar.AM_PM);  					//amOrPm=1

//当前年的第几周
int week_of_year = cal.get(Calendar.WEEK_OF_YEAR);		//week_of_year=5

//当前月的星期数
int week_of_month = cal.get(Calendar.WEEK_OF_MONTH);	//week_of_month=5

//当前月中的第几个星期
int day_of_week_in_month = cal.get(Calendar.DAY_OF_WEEK_IN_MONTH); //day_of_week_in_month=4

//当前年的第几天
int day_of_year = cal.get(Calendar.DAY_OF_YEAR);		//day_of_year=27

注意项

Calendar有很多方法都是复用的,比如get()方法和getActualMaximum()方法,传入的参数是一个用来区分要调用的功能的整形。所以如果想用getActualMaximum()方法获得一个月的最大天数,即:

int actualMaximum = cal.getActualMaximum(Calendar.DAY_OF_YEAR);//一年最大天数
actualMaximum = cal.getActualMaximum(Calendar.DAY_OF_MONTH);//一月最大天数

但如果想要获取下个月的最大天数,就不能直接:

actualMaximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH+1);

Calendar.DAY_OF_MONTH(DATE)的值是一个定值5,所以加1后传入的值为6,等效于DAY_OF_YEAR,最后会返回给actualMaximum一个值365(或366),如果想要获取时间戳所指向的下一个月或年的最大天数,应该:

cal.add(Calendar.MONTH,1);
actualMaximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

这个操作是给当前日历对象cal所指向的月份+1,想操作年份或天数的话同理将Calendar.MONTH替换成Calendar.YEAR或Calendar.DAY_OF_YEAR即可,同理,如果想获取的是上一个月的,给月数-1即可:

cal.add(Calendar.MONTH,-1);
actualMaximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
  • 综上,形如Calendar.DAY_OF_MONTH的参数起到的其实是一个类似枚举类的作用,用来标识在调用某个可复用方法时实际想要使用的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值