java.text.ParseException:无法解析的日期:将 mm/dd/yyyy 字符串转换为日期

Posted

技术标签:

【中文标题】java.text.ParseException:无法解析的日期:将 mm/dd/yyyy 字符串转换为日期【英文标题】:java.text.ParseException: Unparseable date: convert mm/dd/yyyy string to a date 【发布时间】:2014-09-16 15:24:19 【问题描述】:

当我将mm/dd/yyyy 格式的字符串对象转换为Date 时,它给了我

java.text.ParseException: Unparseable date: "09/17/2014"

我正在尝试这样做:

String date= "09/17/2014";
DateFormat df = new SimpleDateFormat();
Date journeyDate= (java.sql.Date) df.parse(date);

【问题讨论】:

我建议你不要使用 SimpleDateFormat 和两个 Date 类。这些类设计不佳且早已过时,尤其是第一个类是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDateDateTimeFormatter 【参考方案1】:

这里有几个潜在的问题:

您没有指定格式 您没有指定语言环境 您没有指定时区 您正在尝试将返回值(将是 java.util.Date 引用)转换为 java.sql.Date - 这会失败

你想要这样的东西:

DateFormat df = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
df.setTimeZone(...); // Whatever time zone you want to use
Date journeyDate = new java.sql.Date(df.parse(text).getTime());

【讨论】:

嗨,乔恩月不能是 17 岁,即使 +1 以获得很好的解释,您也需要切换它 @SparkOn:哎呀 - 已修复,谢谢。出于某种原因误读了问题。【参考方案2】:
DateFormat df = new SimpleDateFormat("MM/dd/yyyy",Locale.ENGLISH);
Date journeyDate = df.parse(date); // gives you java.util.Date

如果你想要 java.sql.Date 那么

java.sql.Date sqlDate = new java.sql.Date(journeyDate.getTime());

【讨论】:

【参考方案3】:

我有以下例外:

java.text.ParseException: 无法解析的日期

System.out.println("inside the XMLGregorianCalendar");

sb = (String) map.get(fieldname);
System.out.println("THis is XMLGReogoriaaaaan calendar"+ sb);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
Date journeyDate = new java.sql.Date(df.parse(sb).getTime());
System.out.println("this"+journeyDate);

【讨论】:

这是一个答案还是您面临的问题?【参考方案4】:

您混合了mM

m 代表分钟,M 代表月份。

以下是工作格式的示例。

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
String dateInString = "07/06/2013"; 
Date date = formatter.parse(dateInString);
System.out.println(formatter.format(date));

【讨论】:

【参考方案5】:

java.time

我建议您使用现代 Java 日期和时间 API java.time 来进行日期工作。您可以通过 JDBC(自 JDBC 4.2 起)或 JPA(例如自 Hibernate 5.0 起)直接将 java.time.LocalDate 传递给您的 SQL 数据库。

您需要指定解析的格式:

private static final DateTimeFormatter DATE_FORMATTER 
        = DateTimeFormatter.ofPattern("MM/dd/uuuu", Locale.ENGLISH);

剩下的很简单:

    String date = "09/17/2014";
    LocalDate journeyDate = LocalDate.parse(date, DATE_FORMATTER);
    System.out.println(journeyDate);

输出:

2014-09-17

我假设您试图指定您想要java.sql.Date,因为您需要它与 SQL 数据库一起使用。但是你不需要java.sql.Date。如何在 SQL 中插入LocalDate,见底部链接。

如果您需要 java.sql.Date 来获取您现在无法升级到 java.time 的旧版 API,那么转换也很简单:

    java.sql.Date oldfashionedJavaSqlDate = java.sql.Date.valueOf(journeyDate);
    System.out.println(oldfashionedJavaSqlDate);

2014-09-17

你的代码发生了什么?

Jon Skeet 已经指出了您的代码存在的问题。但只是出于好奇,更准确地说,发生了什么?无参数 SimpleDateFormat 构造函数为您提供默认语言环境中日期和时间的本地化格式。例如对于en-IN 语言环境,格式可能类似于17/09/14, 12:00 AM。在这种情况下,您的格式化程序会将 09 解析为月份中的某天,将 17 解析为月份,并将 2014 解析为年份,然后抱怨异常,因为字符串中不存在逗号和时间。

链接

Oracle tutorial: Date Time 解释如何使用 java.time。 Insert & fetch java.time.LocalDate objects to/from an SQL database such as H2

【讨论】:

以上是关于java.text.ParseException:无法解析的日期:将 mm/dd/yyyy 字符串转换为日期的主要内容,如果未能解决你的问题,请参考以下文章

java.text.ParseException:无法解析的日期:将 mm/dd/yyyy 字符串转换为日期

TimeFormatException:java.text.ParseException: Unparseable date: ““

服务器处理发生异常:java.text.ParseException: Unparseable date

出现错误 java.text.ParseException: Unparseable date: (at offset 0) 即使简单日期格式和字符串值相同

我收到此错误 java.text.ParseException: Unparseable date: "2017-03-09T18:30:00.000Z"

java.text.ParseException: Failed to parse date ["未知']