Java中如何获取本月开始与结束时间:两种经典实现方案
在使用Java进行时间处理时,明确月份的起始与终止节点是许多业务逻辑的基础。本文详细演示了如何利用java.util.Calendar类精准定位本月第一天及最后一天。文章提供了两种核心操作路径:基础获取方式与精确到23:59:59的格式化方案,并解释了关键API的使用细节。
使用Calendar计算月度起止时间
准备条件:引入java.util.Calendar、java.util.Date及java.text.SimpleDateFormat类;确保项目运行环境为Java 8或更早版本(Java 8+推荐使用java.time包)。
第1步:初始化Calendar实例并设为当前时间
目的:建立一个可修改的时间对象基准点。通过调用静态工厂方法获取系统默认时区的日历实例,并关联当前系统时间,避免硬编码特定日期。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// 获取当前日期
Date currentDate = new Date();
// 创建Calendar实例
Calendar calendar = Calendar.getInstance();
// 设置日期为当前日期
calendar.setTime(currentDate); 第2步:确定本月开始时间(当月1号零点)
入口:对已初始化的Calendar对象进行操作。
动作:调用set(Calendar.DAY_OF_MONTH, 1)将日期域强制设为该月第一日。
参数说明:DAY_OF_MONTH对应自然日的序号,设值为1即锁定月初起点。此时保留默认的时分秒(通常为当前时刻),若需严格以00:00:00作为起点,可补充调用calendar.set(Calendar.HOUR_OF_DAY, 0)等清零操作。在此示例中直接记录状态,获得本月起始时间的Date对象。
// 将日期设置为该月的第一天
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取本月的开始时间
Date startTime = calendar.getTime();
第3步:确定本月结束时间(最后一天)
目的:解决不同月份天数差异(28至31天)导致的硬编码失效问题。
动作:利用getActualMaximum()方法动态查询指定字段的实际最大值。
重要参数:Calendar.DAY_OF_MONTH用于获取当月最大天数。随后将该值设回日历对象。注意:此步骤会覆盖前一步设置的“1号”,必须重新读取时间或使用新的Calendar实例/快照保存开始时间(如下文代码所示的顺序)。
// 将日期设置为该月的最后一天
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
// 获取本月的结束时间
Date endTime = calendar.getTime(); 第4步:格式化并输出结果
使用SimpleDateFormat定义展示格式(如"yyyy-MM-dd HH:mm:ss"),分别格式化上下两步获取的Date对象,完成视觉呈现。标准做法输出结果为类似 本月结束时间:2023-10-31 14:25:30 的形式,其中小时分钟秒继承自初始化时的当前系统时间。
// 输出结果
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("本月开始时间:" + dateFormat.format(startTime));
System.out.println("本月结束时间:" + dateFormat.format(endTime));
}
}
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













