如何在Java中将yyyy-MM-dd格式日期字符串转为dd-MM-yyyy带纳秒格式?
如何将
yyyy-MM-dd HH:mm:ss格式日期转换为dd-MM-yyyy HH:mm:ss.SSSSSSSSS? 你的代码无法运行的核心问题是解析和格式化的模式完全不匹配输入输出要求:
- 解析时用了带
T和Z的模式yyyy-MM-dd'T'HH:mm:ss.SSS'Z',但你的输入是不带这些符号的yyyy-MM-dd HH:mm:ss,直接解析会抛出ParseException。 - 格式化用的
dd/MM/yyyy, Ka和目标格式dd-MM-yyyy HH:mm:ss.SSSSSSSSS完全不符,既没有正确的日期分隔符,也没处理9位毫秒的需求。
下面给出两种可行的实现方案:
方案一:使用SimpleDateFormat(兼容Java 7及以下)
注意:SimpleDateFormat是非线程安全的,多线程环境下要避免共用实例。
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateConverter { public String formatoFechaFinBd(String dateService) throws ParseException { // 用输入对应的模式解析字符串 SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = inputFormat.parse(dateService); // 用目标模式格式化,SSSSSSSSS表示9位毫秒(原日期无毫秒,会自动补0) SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSSSSSSSS"); return outputFormat.format(date); } }
方案二:使用Java 8+新日期API(推荐)
Java 8引入的java.time包是线程安全且功能更完善的日期处理方案,优先推荐:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class DateConverter { public String formatoFechaFinBd(String dateService) { // 定义输入和输出的格式化器 DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss.SSSSSSSSS"); // 解析字符串为LocalDateTime,再格式化为目标字符串 LocalDateTime dateTime = LocalDateTime.parse(dateService, inputFormatter); return dateTime.format(outputFormatter); } }
两种方案都能将示例输入"2023-03-13 12:00:02"转换为目标输出"13-03-2023 12:00:02.000000000"。
内容的提问来源于stack exchange,提问作者Root93
相关产品推荐
相关产品推荐

