
本文介绍如何使用 java 的 simpledateformat 类将形如 "2023-03-13 12:00:02" 的日期字符串转换为 "13-03-2023 12:00:02.000000000" 格式,涵盖解析、格式化及常见陷阱规避。
本文介绍如何使用 java 的 simpledateformat 类将形如 "2023-03-13 12:00:02" 的日期字符串转换为 "13-03-2023 12:00:02.000000000" 格式,涵盖解析、格式化及常见陷阱规避。
要实现从 "yyyy-MM-dd HH:mm:ss" 到 "dd-MM-yyyy HH:mm:ss.SSSSSSSSS" 的格式转换,关键在于分两步精准处理:先按原始格式解析字符串为 Date 对象,再按目标格式重新格式化输出。注意:SimpleDateFormat 本身不支持纳秒(9位小数秒),因此需手动补零以满足 .000000000 的显示需求。
以下是推荐的实现方式(兼容 Java 7+):
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public static String formatoFechaFinBd(String dateService) throws ParseException {
// 步骤1:使用与输入完全匹配的模式解析(注意空格,无 'T' 和 'Z')
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = inputFormat.parse(dateService);
// 步骤2:格式化为 dd-MM-yyyy HH:mm:ss + 补足9位纳秒(因SimpleDateFormat最多到毫秒)
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
String base = outputFormat.format(date);
// 手动追加 ".000000000" —— 因原始字符串无毫秒/纳秒信息,按题意补零
return base + ".000000000";
}
⚠️ 重要注意事项:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 原始代码中使用 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" 解析会失败,因为输入是 "2023-03-13 12:00:02"(空格分隔,无 T 和 Z),必须严格匹配;
- SimpleDateFormat 的 S 仅表示毫秒(最多3位),无法直接输出9位纳秒;若需真实纳秒精度,应改用 java.time API(Java 8+);
- hh 表示12小时制,应使用 HH 表示24小时制,避免中午/凌晨混淆;
- SimpleDateFormat 非线程安全,多线程环境下建议每次创建新实例,或使用 ThreadLocal 封装。
✅ 现代推荐(Java 8+)—— 更健壮、线程安全:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public static String formatoFechaFinBd(String dateService) {
LocalDateTime dt = LocalDateTime.parse(dateService, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return dt.format(DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss")) + ".000000000";
}
总结:日期格式转换的核心是“解析模式 ≡ 输入格式,输出模式 ≡ 目标格式”。优先选用 java.time API 提升可维护性与安全性;若受限于旧版本,则务必校验模式字符串与实际数据的一致性,并谨慎处理精度缺失问题。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










