calendar的使用。以及如何获取某月份最后一天的方法

本文介绍了Java的Calendar类在处理日期时的注意事项,特别是月份从0开始计算,0表示January,11表示December。通过设置日历字段为特定年份的某月的第0天,可以获取该月的最后一天。例如,cal.set(2019, 2, 0)可得到2月最后一天,cal.set(2019, 0, 0)则表示2018年的最后一天。" 7622421,1255250,Ubuntu Apache2 启动失败:端口占用问题解决方案,"['Ubuntu', 'Apache', '服务器管理', '网络服务', '故障排查']

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

 

calendar的使用:

注意:calendar的 与月相关的设置都是从0开始的计算的,0表示January,11表示December。

年/日 则从1开始(经常把月的特殊给忘记。。。。)

month - 用来设置 MONTH 日历字段的值。Month 值是基于 0 的。例如,0 表示 January

 

public static void test() {
	
	//calendar时抽象类 不能new。java提供了getInstance()方法来获取其对象
	Calendar calendar =Calendar.getInstance();
	// 获取年
	int year = calendar.get(Calendar.YEAR);
	
	// 获取月,这里需要需要月份的范围为0~11,因此获取月份的时候需要+1才是当前月份值
	int month = calendar.get(Calendar.MONTH) + 1;
	
	// 获取日
	int day = calendar.get(Calendar.DAY_OF_MONTH);
	// 获取时
	//	 	int hour = calendar.get(Calendar.HOUR);	//12小时表示
	int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24小时表示
	
	// 获取分
	int minute = calendar.get(Calendar.MINUTE);
	// 获取秒
	int second = calendar.get(Calendar.SECOND);
	
	// 星期,英语国家星期从 星期日开始计算 
	int weekday = calendar.get(Calendar.DAY_OF_WEEK)-1;
	System.out.println("现在是" + year + "年" + month + "月" + day + "日" + hour+ "时"+ minute + "分" + second + "秒" + "星期" + weekday);
	//设置时间

	calendar.set(2019,4,8);//这里实际设置的时间是2019年5月8号
	System.out.println(calendar.get(Calendar.YEAR));
	System.out.println(calendar.get(Calendar.MONTH)+1);
	System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
	
}
	

获取2月的最后一天操作:

private static void test2() {
	Calendar cal =Calendar.getInstance();
	cal.clear();//清楚系统时间,避免影响
	cal.set(2019,2,1);//获取3月第一天
//	cal.add(Calendar.DATE,1);//获取当前日期的下一天
	cal.add(Calendar.DATE,-1);//获取当前日期的上一天
	System.out.println(cal.get(Calendar.YEAR)+"年"+(cal.get(Calendar.MONTH)+1)+"月"+cal.get(Calendar.DAY_OF_MONTH)+"日");
		 	
}

也可以直接这样:

     cal.set(2019,2,0);//设置成3月的第0天,也就是2月的最后一天

     同理,如果设置成cal.set(2019,0,0);就表示 2018年的最后一天

private static void test2() {
	Calendar cal =Calendar.getInstance();
	cal.clear();//清楚系统时间,避免影响
	cal.set(2019,2,0);//设置成3月的第0天,也就是2月的最后一天
	System.out.println(cal.get(Calendar.YEAR)+"年"+(cal.get(Calendar.MONTH)+1)+"月"+cal.get(Calendar.DAY_OF_MONTH)+"日");
		 	
}

 

<think>好的,我现在需要帮助用户找到在Java使用Calendar获取当前年份最后一天方法。首先,我应该回忆一下Calendar类的常用方法Calendar类用于处理日期和时间,可以通过getInstance()获取实例,然后设置字段的值。 用户想要获取当前年份的最后一天,也就是每年的12月31日。这时候可能需要先设置年份为当前年,然后月份设置为12月(注意月份是从0开始的,所以11代表12月),然后获取月份最后一天。或者,可能需要将日期调整到下一年的第一天,然后往回减一天。 不过,直接设置月份为12月(Calendar.DECEMBER,对应11)可能更直接。然后使用getActualMaximum(Calendar.DAY_OF_MONTH)获取该月的最大天数,即最后一天。例如,先设置年份为当前年,月份为12月,然后获取当月的最后一天。 接下来,我需要验证这个方法的正确性。设置年份的话,可能需要先获取当前年份,然后设置到Calendar实例中。比如: Calendar calendar = Calendar.getInstance(); int currentYear = calendar.get(Calendar.YEAR); calendar.set(Calendar.YEAR, currentYear); calendar.set(Calendar.MONTH, Calendar.DECEMBER); calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置为12月1日 int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 不过,或者更简单的方式是直接设置月份为12月,然后获取该月的最大天数。需要注意的是,Calendar月份是从0开始的,所以12月对应的数值是11。但Calendar类提供了常量Calendar.DECEMBER,其值就是11,所以使用这个常量更清晰。 另外,可能还需要考虑时区的问题,但通常使用默认的Calendar实例即可,除非用户有特定需求。此外,设置日期到12月1日可能不是必要的,因为getActualMaximum会根据当前设置的月份和年份自动计算,即使日期字段是其他值。不过为了确保正确,可能需要将日期设置为该月的某一天,比如1日,再获取最大值。 然后,代码示例应该包括以下步骤:获取Calendar实例,设置年份为当前年,设置月份为12月,然后获取该月的最后一天。或者,直接设置月份为12月,而不需要显式设置年份,因为Calendar.getInstance()已经获取了当前时间。 例如: Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, Calendar.DECEMBER); calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置为12月1日 int lastDayOfYear = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 或者,可能不需要设置DAY_OF_MONTH,直接获取calendar.set(Calendar.MONTH, Calendar.DECEMBER); int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 但这时候,calendar的当前日期可能已经是某一天,比如当前是11月,设置月份到12月后,DAY_OF_MONTH可能超过该月的最大值,比如如果当前是31日,而12月只有31天,没问题。但如果是2月30日,设置到2月的话会自动调整。不过getActualMaximum似乎不受当前日期的影响,它返回该月的最大天数,所以可能不需要设置DAY_OF_MONTH。 所以更简洁的代码可以是: Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, Calendar.DECEMBER); int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("Last day of current year: " + lastDay); 不过,这里可能有一个问题:Calendar.getInstance()的年份已经是当前年,所以设置月份到DECEMBER即可,这样getActualMaximum会返回12月的天数,即31天。这应该是正确的。 但为了确保年份是正确的,可能需要显式设置年份,比如: int currentYear = calendar.get(Calendar.YEAR); calendar.clear(); // 清除所有字段 calendar.set(Calendar.YEAR, currentYear); calendar.set(Calendar.MONTH, Calendar.DECEMBER); int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 这样可能更准确,因为clear()会重置所有字段,避免其他字段的影响。例如,原来的calendar可能设置过其他字段,如DAY_OF_MONTH,但设置YEAR和MONTH后,getActualMaximum会正确计算该年该月的最后一天。 另外,用户可能需要得到具体的日期对象,比如Date或者字符串表示,所以在代码中可以组合这些步骤。 总结步骤应该是: 1. 获取Calendar实例。 2. 设置年份为当前年(可选,因为Calendar.getInstance()已经是当前年)。 3. 设置月份为12月(Calendar.DECEMBER)。 4. 使用getActualMaximum(Calendar.DAY_OF_MONTH)获取最后一天。 示例代码可能如下: Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH, Calendar.DECEMBER); int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("Last day of the current year: " + lastDay); 或者,更详细地构造日期Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)); calendar.set(Calendar.MONTH, Calendar.DECEMBER); calendar.set(Calendar.DAY_OF_MONTH, 1); int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 不过,第二种方法中的设置DAY_OF_MONTH为1可能不必要,因为getActualMaximum不受当前日期的影响。 另外,可能用户需要得到一个完整的日期对象,例如表示12月31日的日期,那么可以设置DAY_OF_MONTH为lastDay,然后获取时间: calendar.set(Calendar.DAY_OF_MONTH, lastDay); Date lastDayDate = calendar.getTime(); 这样用户可以得到具体的Date对象。 还需要注意,Calendar类在Java 8之后被新的日期时间API(如LocalDate)取代,所以可能建议用户使用新的API,但用户明确要求使用Calendar类,所以应按照用户需求。 在参考内容中,引用[3]提到GregorianCalendar中的computeTime()方法,涉及到将字段值转换为时间值,这可能与Calendar的内部计算有关,但用户不需要直接处理这些,只需正确设置字段即可。 总结,正确的方法是通过设置月份为DECEMBER,然后获取该月的最大天数,即可得到当前年的最后一天。</think>要使用Java中的`Calendar`类获取当前年份的最后一天,可以按照以下步骤操作: 1. **创建`Calendar`实例**:通过`Calendar.getInstance()`获取当前日期和时间。 2. **设置月份为12月**:使用`Calendar.DECEMBER`(值为11)表示12月。 3. **获取该月最后一天**:通过`getActualMaximum(Calendar.DAY_OF_MONTH)`获取12月的最大天数。 示例代码如下: ```java import java.util.Calendar; public class Main { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); // 设置月份为12月 calendar.set(Calendar.MONTH, Calendar.DECEMBER); // 获取12月的最后一天 int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("当前年份的最后一天是:" + lastDay + "日"); // 如果需要具体日期,可进一步设置 calendar.set(Calendar.DAY_OF_MONTH, lastDay); System.out.println("日期表示:" + calendar.getTime()); } } ``` **代码说明**: - `calendar.set(Calendar.MONTH, Calendar.DECEMBER)`将月份设置为12月。 - `getActualMaximum(Calendar.DAY_OF_MONTH)`返回12月的最大天数(固定为31)。 - 通过`calendar.set(Calendar.DAY_OF_MONTH, lastDay)`可设置日期最后一天,并通过`getTime()`转换为`Date`对象。 **注意**:`Calendar`类在Java 8后逐渐被`java.time.LocalDate`取代,新代码建议使用新API[^2]。例如: ```java import java.time.LocalDate; import java.time.Month; public class Main { public static void main(String[] args) { LocalDate lastDay = LocalDate.now().withMonth(12).withDayOfMonth(31); System.out.println("新API的最后一天:" + lastDay); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值