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 的LocalDate
和DateTimeFormatter
。
【参考方案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】:您混合了m
和M
。
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"