Java日期计算与格式化实战:Calendar与SimpleDateFormat用法解析

洛溪
洛溪
发布时间:2026-10-14 | 6人浏览过
原创

在日常Java开发中,经常需要处理日期的显示与计算任务。本文将演示如何利用Calendar类执行时间的加减操作,并使用SimpleDateFormat将Date对象转换为指定格式的字符串,提供直接可用的代码逻辑。

核心工具类说明

实现上述功能主要依赖以下两个类:

  • java.util.Date:表示特定的瞬间,精确到毫秒。
  • java.text.SimpleDateFormat:用于以区域设置敏感的样式格式化和解析日期。例如 yyyy-MM-dd hh:mm:ss 可分别代表四位年份、月份、日期、12小时制时间及秒数。
  • java.util.Calendar:提供了比 Date 更丰富的操作方法,特别是进行日期字段的增减时(如加一年、减一天),它能自动处理跨月、闰年等边界情况。

操作步骤与代码实现

第1步:初始化当前时间与格式化器

首先创建当前日期对象,并实例化一个 SimpleDateFormat 用于统一输出格式,确保后续所有打印结果的一致性。

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class HelloWorld {
    public static void main(String[] args) {
        // 指定时间输出格式:年-月-日 时:分:秒
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        
        Date dt = new Date();
        System.out.println("当前时间:" + sdf.format(dt));

        // ... 后续逻辑见下一步
    }
}

第2步:执行日期加减运算

使用 Calendar.getInstance() 获取日历实例,并将当前时间设入其中。随后利用 add() 方法进行连续的时间变动:

  • 减1年:rightNow.add(Calendar.YEAR, -1);
  • 再加3个月:rightNow.add(Calendar.MONTH, 3); (在刚才结果基础上累加)
  • 再加10天:rightNow.add(Calendar.DAY_OF_YEAR, 10); (注意此处使用 DAY_OF_YEAR 以准确计算天数增量,避免受月份天数影响产生歧义)

每步操作后,调用 sdf.format(rightNow.getTime()) 打印出实时变化后的时间。

第3步:整合完整代码

以下为可直接运行的完整示例代码:

public class HelloWorld {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date dt = new Date();
        
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        
        // 当时日期减1年
        rightNow.add(Calendar.YEAR, -1);
        System.out.println("减1年:" + sdf.format(rightNow.getTime()));
        
        // (在刚才的结果上)再加3个月
        rightNow.add(Calendar.MONTH, 3);
        System.out.println("再加3个月:" + sdf.format(rightNow.getTime()));
        
        // (在刚才的结果上)再加10天
        rightNow.add(Calendar.DAY_OF_YEAR, 10);
        System.out.println("再加10天:" + sdf.format(rightNow.getTime()));
    }
}

预期输出结果与分析

假设程序运行时的初始时间为 2013年2月21日 09:40:49,执行上述逻辑后的典型输出如下:

  • 当前时间:2013-02-21 09:40:49
  • 减1年后:2012-02-21 09:40:49(注意闰年处理:若原日期为2012-02-29,减一年后通常变为02-28或次年调整)
  • 再加3个月后:2012-05-21 09:40:49
  • 再加10天后:2012-05-31 09:40:49

该过程展示了 Calendar 链式操作的便利性。每次 add 都在上一次计算的结果之上继续累积,无需重新初始化对象。

注意事项

1. SimpleDateFormat 不是线程安全的,若在多线程环境中频繁使用,建议在每个线程中使用单独的实例或使用 DateTimeFormatter (Java 8+)。 2. hh 代表12小时制,若需24小时制请改用 HH。 3. 在进行天数增减时,优先使用 Calendar.DAY_OF_YEAR 而非 DAY_OF_MONTH,前者指一年中的第几天,更能适应大小月的自然过渡。

以上就是Java日期运算与格式化代码的详细内容,更多关于Java基础编程与时间处理的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表