获取本月,上月,下月 第一天和最后一天 java

通过Java的Calendar类和SimpleDateFormat类,可以获取并格式化当前、上月、下月的第一天和最后一天的日期。主要操作包括设置月份、日期并进行日期加减来实现。

Calendar cl = new Calendar.getInstance();//获取日历对象

SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");

String str = sf.format(cl.getTime());//当前时间

 

本月第一天:直接设置月份为当前月份,day为1号(当前月份为Calendar.MONTH-1)

cl.set(Calendar.MONTH,-1);

cl.set(Calendar.DAY_OF_MONTH,1);

String str2 = sf.format(cl.getTime());//本月第一天

本月最后一天:先将时间设置为下个月1号,然后减一天,即为本月最后一天

cl.set(Calendar.MONTH,0);//设置月份为下个月

cl.set(Calendar.DAY_OF_MONTH,1);//设置day为1号

cl.add(Calendar.DATE,-1);将时间减1天

String str3 = sf.format(cl.getTime());//本月最后一天

上月第一天:直接设置月份为上个月,day为1号

cl.set(Calendar.MONTH,-2);//设置月份为上个月

cl.set(Calendar.DAY_OF_MONTH,1);//设置day为1号

String str4 = sf.format(cl.getTime());

上月最后一天:先将时间设置为本月1号,然后减一天即为上月最后一天

cl.set(Calendar.MONTH,-1);//设置为本月

cl.set(Calendar.DAY_OF_MONTH,1);//设置day为1号

cl.add(Calendar.DATE,-1);//将时间减1天

String str5 = sf.format(cl.getTime());//上月最后一天

下月第一天:直接设置月份为下月,day为1号

cl.set(Calendar.MONTH,0);//设置为下月

cl.set(Calendar.DAY_OF_MONTH,1);设置day为1号

String str6 = sf.format(cl.getTime());//下月第一天

下月最后一天:设置月份为下下月,day为1号,然后减一天

cl.set(Calendar.MONTH,1);//设置为下下月

cl.set(Calendar.DAY_OF_MONTH,1);设置day为1号

cl.add(Calendar.DATE,-1);//将时间减1天

String str7 = sf.format(cl.getTime());//下月最后一天

 

 

 

Java获取**上个月的第一天****最后一天**,可以使用 `java.time` 包中的类(如 `LocalDate`、`YearMonth`)来完成,这种方式简洁、线程安全,并且避免了旧版 `Date` `Calendar` 的诸多问题。 --- ### ✅ 示例代码:获取上个月的第一天最后一天 ```java import java.time.LocalDate; import java.time.YearMonth; public class PreviousMonthExample { public static void main(String[] args) { // 获取当前日期 LocalDate today = LocalDate.now(); // 获取上个月 YearMonth previousMonth = YearMonth.from(today).minusMonths(1); // 获取上个月的第一天 LocalDate firstDayOfPreviousMonth = previousMonth.atDay(1); // 获取上个月的最后一天 LocalDate lastDayOfPreviousMonth = previousMonth.atEndOfMonth(); // 输出结果 System.out.println("上个月的第一天: " + firstDayOfPreviousMonth); System.out.println("上个月的最后一天: " + lastDayOfPreviousMonth); } } ``` --- ### ✅ 输出示例(假设当前是 2025-04-05) ``` 上个月的第一天: 2025-03-01 上个月的最后一天: 2025-03-31 ``` --- ### ✅ 使用 `java.util.Calendar`(旧版兼容写法) 如果你还在使用 Java 7 或更早版本,可以使用 `Calendar`: ```java import java.text.SimpleDateFormat; import java.util.Calendar; public class PreviousMonthExampleLegacy { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, -1); // 上个月 calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置为第一天 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println("上个月的第一天: " + sdf.format(calendar.getTime())); // 获取最后一天 int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, lastDay); System.out.println("上个月的最后一天: " + sdf.format(calendar.getTime())); } } ``` --- ### ✅ 总结 | 方法 | 推荐程度 | 说明 | |------|----------|------| | `java.time.LocalDate` + `YearMonth` | ✅ 推荐 | 简洁、线程安全、易读 | | `Calendar` | ⚠️ 不推荐(兼容旧代码) | 容易出错,可读性差 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值