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

Java字符串日期解析异常:如何将20/03/2018,18:20:44转为日期格式?

解决Java日期解析异常的问题

嘿,我一眼就发现你代码里的问题啦!出现unable to parse date异常,完全是因为用错了日期格式符——这是个很常见的小疏忽~

错误原因分析

你写的格式字符串是"dd/mm/yyyy hh:mm:ss",这里有两个关键错误:

  • 小写的mm代表的是分钟,而你要表示的月份应该用大写的MM
  • 小写的hh是12小时制的小时数,你的时间是18点(属于24小时制),必须换成大写的HH

修正后的代码

把格式字符串改对之后,就能正常解析了,这里是修正后的版本:

public static Date getDate(String dateString) {
    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    formatter.setTimeZone(TimeZone.getTimeZone("PST"));
    try {
        Date date = formatter.parse(dateString);
        return date;
    } catch (ParseException e) {
        logger.error("Error while parsing date string: " + dateString, e);
    }
    return null;
}

额外建议(Java 8+)

如果你用的是Java 8或更高版本,非常推荐使用java.time包下的新日期API——它不仅线程安全,API设计也更清晰。这里给你一个示例:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Date;

public static LocalDateTime getLocalDateTime(String dateString) {
    // 推荐用完整的时区ID代替缩写,避免歧义
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")
            .withZone(ZoneId.of("America/Los_Angeles"));
    try {
        return LocalDateTime.parse(dateString, formatter);
    } catch (DateTimeParseException e) {
        logger.error("Error while parsing date string: " + dateString, e);
        return null;
    }
}

// 如果需要转换为旧的Date对象
public static Date convertToDate(LocalDateTime localDateTime) {
    return Date.from(localDateTime.atZone(ZoneId.of("America/Los_Angeles")).toInstant());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:23:12