将字符串转换为日期时的java.text.ParseException

时间:2016-11-29 10:00:51

标签: java date simpledateformat

我是java的初学者。我是这个网站的新手。

我正在尝试将字符串转换为日期但我得到解析异常。 以下是我的代码:     我的变量myDateValue中的值为Wed May 15 00:00:00 IST 2013

DateFormat sdf1 = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
java.util.Date myDate = sdf1.parse(myDateValue);
java.sql.sqlDate = new java.sql.Date(myDate.getTime());

我得到以下异常:

  

java.text.ParseException:Unparseable date:“Wed May 15 00:00:00 IST   2013"

我也试过了,但也没用:

DateFormat sdf1 = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
String formatdate = sdf1.format(myDateValue);
java.util.Date myate = sdf1.parse(formatdate);
java.sql.sqlDate = new java.sql.Date(myate.getTime());

为此我得到以下错误:

  

java.lang.IllegalArgumentException:无法将给定的Object格式化为   日期

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您的格式dd-MMM-yyyy错误。您的日期似乎为Wed May 15 00:00:00 IST 2013,因此您的格式应为 - EEE MMM dd HH:mm:ss zzz yyyy

有关模式字母的详细信息,请参阅javadoc

编辑以发表评论。如果您希望日期为dd-MMM-yyyy格式,则必须重新格式化 -

SimpleDateFormat originalFormat = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
Date date = originalFormat.parse(myDateValue);
SimpleDateFormat newFormat = new SimpleDateFormat("yyyy-MMM-dd");
String myNewDate = newFormat.format(date);

答案 1 :(得分:0)

tl; dr

LocalDate.parse(                    // Represent a date-only value, without time-of-day and without time zone.
    "23-Jan-2018" ,
    DateTimeFormatter.ofPattern(    // Define a formatting pattern to match your input.
        "dd-MMM-uuuu" ,             // The modern parsing codes have changed a bit from legacy codes. Study the class documentation carefully.
        Locale.US                   // Specify a locale to determine a human language to use in translating the name of the month.
    )                               
)                                   // Returns a `LocalDate` object.
.toString()                         // Generate text in standard ISO 8601 format to represent the value of this `LocalDate` object.

请参阅此code run live at IdeOne.com

  

2018-01-23

java.time

现代方法使用 java.time 类代替了可怕的旧日期时间类(DateCalendarSimpleDateFormat)。

旧类缺少表示没有日期和时区的仅日期值的类。 java.sql.Date类冒充了此功能,但实际上保留了一会儿,即一个带有日期时间和UTC偏移量的日期。

LocalDate

LocalDate类表示没有日期,没有time zoneoffset-from-UTC的仅日期值。

定义一种格式设置以匹配您的输入。

String input = "23-Jan-2018" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MMM-uuuu" , Locale.US ) ;
LocalDate ld = LocalDate.parse( input , f ) ;

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore