1. 概述

在许多应用场景中,我们只需要显示当前年份的后两位数字,而非完整的四位数。本文将介绍三种实现方式:

  • 使用传统的 Calendar 类配合取模运算
  • 通过 SimpleDateFormat 实现自动格式化
  • 利用现代的 java.time API

2. 使用 Calendar 和取模运算

在开始测试前,我们先定义一个常量作为预期结果的参考值:

String EXPECTED = Year.now().format(DateTimeFormatter.ofPattern("uu"));

这个常量确保所有方法使用相同的基准值进行对比。

这种方法通过传统 Calendar API 获取当前年份,再用取模运算提取后两位数字

@Test
public void whenUsingCalendarModulo_thenReturnsCorrectTwoDigitYear() {
    int currentYear = Calendar.getInstance().get(Calendar.YEAR);
    int lastTwo = currentYear % 100;
    String result = (lastTwo < 10) ? "0" + lastTwo : String.valueOf(lastTwo);

    assertEquals(EXPECTED, result);
}

⚠️ 需要注意:当提取的数字小于10时,必须手动补零,否则会踩坑。

3. 使用 SimpleDateFormat

SimpleDateFormat 类能根据指定模式格式化日期。这里使用 "yy" 模式自动将年份格式化为两位数(必要时自动补零):

@Test
public void whenUsingSimpleDateFormat_thenReturnsCorrectTwoDigitYear() {
    DateFormat df = new SimpleDateFormat("yy");
    String result = df.format(new Date());

    assertEquals(EXPECTED, result);
}

✅ 这种方式通过自动补零简化了代码,避免了额外的条件判断逻辑。

4. 使用 java.time API

现代的 java.time API 能直接格式化当前年份。**我们使用 Year 类配合 "uu" 模式的 DateTimeFormatter**,以简洁且线程安全的方式获取两位数年份:

@Test
public void whenUsingJavaTimeAPI_thenReturnsCorrectTwoDigitYear() {
    String result = Year.now().format(DateTimeFormatter.ofPattern("uu"));

    assertEquals(EXPECTED, result);
}

✅ 这种方式优势明显:

  • 代码更简洁易读
  • 天然线程安全
  • 避免了传统日期处理的常见陷阱

5. 总结

本文探讨了三种在 Java 中获取当前年份后两位数字的方法:

  1. Calendar + 取模运算
    ✅ 实现简单粗暴
    ❌ 需要手动处理补零逻辑
    ⚠️ 适合遗留系统维护

  2. SimpleDateFormat
    ✅ 自动处理补零
    ❌ 线程不安全(需注意并发场景)
    ⚠️ 适合简单格式化需求

  3. java.time API
    ✅ 现代化解决方案
    ✅ 线程安全且代码简洁
    ✅ 强烈推荐用于新项目开发

对于新项目,直接使用 java.time API 是最佳选择;若在维护遗留代码,可根据实际情况选择其他方案。


原始标题:How to Display the Last Two Digits of the Current Year in Java | Baeldung