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 中获取当前年份后两位数字的方法:
Calendar + 取模运算
✅ 实现简单粗暴
❌ 需要手动处理补零逻辑
⚠️ 适合遗留系统维护SimpleDateFormat
✅ 自动处理补零
❌ 线程不安全(需注意并发场景)
⚠️ 适合简单格式化需求java.time API
✅ 现代化解决方案
✅ 线程安全且代码简洁
✅ 强烈推荐用于新项目开发
对于新项目,直接使用 java.time
API 是最佳选择;若在维护遗留代码,可根据实际情况选择其他方案。