Java中如何将日期格式从"Tue May 08 2018 13:15:00"转为"2018-05-08 13:15:00.000"
刚好处理过类似的需求,尤其是对接数据库的时候经常要做这种日期格式转换。下面给你两种方案,优先推荐Java 8及以上版本的新API,更靠谱:
Java 8+ 推荐方案(DateTimeFormatter)
Java 8引入的java.time包是线程安全的,API设计更清晰,完全替代了旧的Date和SimpleDateFormat类,是现在的首选方案。
步骤很简单:
- 先定义输入格式,匹配你给出的英文日期字符串格式
"Tue May 08 2018 13:15:00",注意必须指定Locale.ENGLISH,否则如果系统默认是中文Locale,会解析失败。 - 把输入字符串解析成
LocalDateTime对象。 - 再定义输出格式,对应你需要的
"2018-05-08 13:15:00.000"。 - 最后格式化输出即可。
完整代码示例:
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; public class DateConverter { public static void main(String[] args) { String inputDate = "Tue May 08 2018 13:15:00"; // 输入格式:匹配英文星期、月份、日期、时间 DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("EEE MMM dd yyyy HH:mm:ss", Locale.ENGLISH); LocalDateTime dateTime = LocalDateTime.parse(inputDate, inputFormatter); // 输出格式:年-月-日 时:分:秒.毫秒(三位) DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); String outputDate = dateTime.format(outputFormatter); System.out.println(outputDate); // 输出:2018-05-08 13:15:00.000 } }
兼容Java 7及以下版本方案(SimpleDateFormat)
如果你的项目还在使用Java 7或更早版本,只能用旧的SimpleDateFormat类,但要注意它不是线程安全的,多线程环境下不要复用同一个实例,最好每次使用时创建新的,或者用ThreadLocal来维护实例。
代码示例:
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class OldDateConverter { public static void main(String[] args) throws ParseException { String inputDate = "Tue May 08 2018 13:15:00"; // 输入格式,同样指定英文Locale避免解析错误 SimpleDateFormat inputSdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss", Locale.ENGLISH); Date date = inputSdf.parse(inputDate); // 输出格式,带三位毫秒 SimpleDateFormat outputSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); String outputDate = outputSdf.format(date); System.out.println(outputDate); // 输出:2018-05-08 13:15:00.000 } }
注意事项
- 不管用哪种方案,转换后的字符串都可以直接放到你的SQL语句中,比如:
格式完全匹配,不会有问题。TO_timestamp('2018-05-08 13:15:00.000', 'YYYY-MM-DD HH24:MI:SS.FF') - 如果你用的是Java 8+,强烈建议使用第一种方案,避免旧API的线程安全问题和设计缺陷。
内容的提问来源于stack exchange,提问作者Raj N
相关产品推荐
相关产品推荐

