You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:35:23