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

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

在日常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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。