我是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格式化为 日期
我做错了什么?
答案 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)
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 类代替了可怕的旧日期时间类(Date
,Calendar
,SimpleDateFormat
)。
旧类缺少表示没有日期和时区的仅日期值的类。 java.sql.Date
类冒充了此功能,但实际上保留了一会儿,即一个带有日期时间和UTC偏移量的日期。
LocalDate
LocalDate
类表示没有日期,没有time zone或offset-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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
目前位于Joda-Time的maintenance 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中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。