You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java字符串日期转指定格式失败,报ParseException异常求助

我来帮你搞定这个日期格式化的问题!你遇到的ParseException主要是两个核心原因:一是没有给SimpleDateFormat设置匹配输入字符串的格式模式,二是月份缩写Aug依赖英文Locale,如果你的程序默认Locale不是英文的话,也会导致解析失败。下面给你两种解决方案:

方法一:修复旧的SimpleDateFormat代码

你需要分别定义输入格式输出格式SimpleDateFormat实例,同时给输入格式指定英文Locale:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class DateConverter {
    public static void main(String[] args) throws Exception {
        String input = "30 Aug 2019";
        
        // 定义匹配输入的格式:dd(日)、MMM(英文月份缩写)、yyyy(年),同时指定英文Locale
        SimpleDateFormat inputFormatter = new SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH);
        Date date = inputFormatter.parse(input);
        
        // 定义目标输出格式:yyyy-MM-dd
        SimpleDateFormat outputFormatter = new SimpleDateFormat("yyyy-MM-dd");
        String strDate = outputFormatter.format(date);
        
        System.out.println(strDate); // 输出:2019-08-30
    }
}

方法二:推荐使用Java 8+的新日期API(更优)

SimpleDateFormat存在线程不安全、API设计不直观等问题,Java 8及以上版本提供的java.time包(JSR-310)是更好的选择,它的类都是不可变且线程安全的:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class LocalDateConverter {
    public static void main(String[] args) {
        String input = "30 Aug 2019";
        
        // 定义输入格式,指定英文Locale
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd MMM yyyy", Locale.ENGLISH);
        LocalDate localDate = LocalDate.parse(input, inputFormatter);
        
        // 定义输出格式
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String strDate = localDate.format(outputFormatter);
        
        System.out.println(strDate); // 输出:2019-08-30
    }
}

这个新API不仅更可靠,代码可读性也更高,建议优先使用。

内容的提问来源于stack exchange,提问作者Shashank

火山引擎 最新活动