
本文介绍如何使用现代java时间api(java.time)将iso格式日期字符串(如"2023-02-01")安全、简洁地转换为自定义格式(如"02012023"),替代已废弃的simpledateformat。
在Java 8及更高版本中,java.time 时间API已成为处理日期和时间的推荐标准。它线程安全、不可变、语义清晰,且彻底取代了易出错、非线程安全的旧式 SimpleDateFormat。针对将 "2023-02-01" 转换为 "02012023" 这一典型需求,推荐采用以下三步流程:
- 解析:使用 LocalDate.parse() 直接解析符合ISO-8601格式(yyyy-MM-dd)的字符串;
-
格式化:通过 DateTimeFormatter.ofPattern("MMdduuuu") 定义目标格式 —— 其中:
MM 表示两位数月份(02),
dd 表示两位数日期(01),
uuuu 表示四位数年份(2023);
⚠️ 注意:应优先使用 u(年份)而非 y(年份字段,可能受历法影响),尤其在跨历法场景下更可靠; - 组合:调用 .format(...) 得到最终字符串。
完整示例代码如下:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateFormatterExample {
public static void main(String[] args) {
String input = "2023-02-01";
String output = LocalDate.parse(input)
.format(DateTimeFormatter.ofPattern("MMdduuuu"));
System.out.println(output); // 输出:02012023
}
}✅ 优势总结:
- 无需手动创建/管理格式器实例,无同步风险;
- 自动校验输入合法性(非法日期如"2023-02-30"会抛出 DateTimeParseException);
- 支持国际化(如需本地化格式,可配合 DateTimeFormatter.ofLocalizedDate(...) 使用);
- 可轻松扩展至带时间的场景(如 LocalDateTime + "MMdduuuu HHmmss")。
? 提示:若输入格式不固定(如含斜杠或中文分隔符),建议先统一预处理,或使用带 DateTimeFormatterBuilder 的自定义解析器。但对标准 yyyy-MM-dd 输入,LocalDate.parse() 开箱即用,简洁高效。
立即学习“Java免费学习笔记(深入)”;











