根据输入时间,获取当前月份的第一天和最后一天

需求描述:主要用于报表统计时的时间处理

代码:

private void dealTime(String theDay) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cale = Calendar.getInstance();
        // 获取当月第一天和最后一天
        String firstday, lastday;

        Date date = null;
        try {
            date = format.parse(theDay);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        cale.setTime(date);

        // 获取前月的第一天
        cale.add(Calendar.MONTH, 0);
        cale.set(Calendar.DAY_OF_MONTH, 1);
        firstday = format.format(cale.getTime());

        cale.add(Calendar.MONTH, 1);
        cale.set(Calendar.DAY_OF_MONTH, 0);
        lastday = format.format(cale.getTime());

        System.out.println("本月第一天和最后一天分别是 : " + firstday +" 00:00:00" + " and " + lastday + " 23:59:59");

    }
<think>我们需要使用Java的日期时间API(java.time包)来处理日期。 具体步骤: 1. 解析输入字符串,例如"202511",表示2025年11月。 2. 使用YearMonth类来表示这个年月。 3. 获取这个月的第一天最后一天。 4. 将第一天最后一天格式化为"yyyyMMdd"的字符串。 注意:输入格式是6位字符串,例如202511,表示2025年11月。 代码示例: 使用YearMonth.parse解析字符串,需要指定格式"yyyyMM"。 然后使用YearMonth的atDay(1)获取第一天,使用atEndOfMonth()获取最后一天。 然后使用DateTimeFormatter格式化输出。 但是,注意输入是202511,所以解析时需要格式"yyyyMM"。 由于我们只需要年月,所以使用YearMonth是最合适的。 另外,注意考虑闰年二月的情况,但YearMonth.atEndOfMonth()会自动处理。 示例代码: ``` import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.time.LocalDate; public class FirstAndLastDayOfMonth { public static void main(String[] args) { String input = "202511"; // 解析为YearMonth YearMonth yearMonth = YearMonth.parse(input, DateTimeFormatter.ofPattern("yyyyMM")); // 获取第一天 LocalDate firstDay = yearMonth.atDay(1); // 获取最后一天 LocalDate lastDay = yearMonth.atEndOfMonth(); // 定义输出格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); String firstDayStr = firstDay.format(formatter); String lastDayStr = lastDay.format(formatter); System.out.println("第一天: " + firstDayStr); System.out.println("最后一天: " + lastDayStr); } } ``` 对于输入"202511",输出应为: 第一天: 20251101 最后一天: 20251130 但是,请注意,如果输入的是2月,比如202402,那么最后一天会是20240229(因为2024是闰年)。 因此,这个方法可以自动处理不同月份的天数。 注意:确保使用Java 8及以上版本,因为java.time包是从Java 8开始引入的。 现在,根据要求,在回答后提出3-5个相关问题。 </think> 以下是使用Java获取指定月份第一天最后一天的实现代码: ```java import java.time.LocalDate; import java.time.YearMonth; import java.time.format.DateTimeFormatter; public class MonthBoundaryUtils { public static void main(String[] args) { String input = "202511"; String[] results = getMonthBoundaries(input); System.out.println("第一天: " + results[0]); // 20251101 System.out.println("最后一天: " + results[1]); // 20251130 } public static String[] getMonthBoundaries(String yyyyMM) { // 验证输入格式 if (!yyyyMM.matches("\\d{6}")) { throw new IllegalArgumentException("输入格式必须是6位数字(如202511)"); } // 创建YearMonth对象 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMM"); YearMonth yearMonth = YearMonth.parse(yyyyMM, formatter); // 获取第一天最后一天 LocalDate firstDay = yearMonth.atDay(1); LocalDate lastDay = yearMonth.atEndOfMonth(); // 格式化为字符串 DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyyMMdd"); return new String[]{ firstDay.format(outputFormatter), lastDay.format(outputFormatter) }; } } ``` ### 关键说明: 1. **输入处理**:接受6位数字字符串(如`202511`) 2. **日期计算**: - 使用`YearMonth.atDay(1)`获取当月第一天 - 使用`YearMonth.atEndOfMonth()`自动计算当月最后一天(兼容闰年) 3. **输出格式**:返回`yyyyMMdd`格式的字符串数组 4. **异常处理**:验证输入格式有效性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值