我正在将字符串类型的日期解析为日期格式,但每次都有此异常
java.text.ParseException: Unparseable date: "2016-05-21T00:00:00" (at offset 4)
我的代码是:
String d = "2016-05-21T00:00:00";
DateFormat df = new SimpleDateFormat("yyyy MM dd HH:mm:ss", Locale.ENGLISH);
Date myDate = null;
try {
myDate = df.parse(d);
} catch (ParseException e) {
e.printStackTrace();
}
答案 0 :(得分:6)
您的日期字符串和DateFormat需要匹配。对于您的输入"2016-05-21T00:00:00"
,正确的DateFormat是:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
答案 1 :(得分:4)
LocalDateTime.parse( "2016-05-21T00:00:00" )
输入字符串2016-05-21T00:00:00
采用标准ISO 8601格式。
在解析或生成日期时间值的文本表示时,默认情况下,Java 8及更高版本中内置的java.time类使用ISO 8601格式。
输入字符串缺少任何offset-from-UTC或time zone信息。所以字符串本身是不精确的,没有特定的含义,因为它不是时间轴上的一个时刻。这些值在java.time中由LocalDateTime
类表示。
String input = "2016-05-21T00:00:00";
LocalDateTime ldt = LocalDateTime.parse( input );
如果您从较大的上下文知道该字符串旨在对某个偏离UTC的内容有意义,请指定ZoneOffset
以获取OffsetDateTime
对象。
ZoneOffset zoneOffset = ZoneOffset.of( 5 , 30 );
OffsetDateTime odt = ldt.atOffset( zoneOffet );
更好的是,如果您确定预定的时区,请指定ZoneId
以获得ZonedDateTime
。
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = ldt.atZone( ZoneId );
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
使用符合JDBC driver或更高版本的JDBC 4.2,您可以直接与数据库交换 java.time 对象。不需要字符串也不需要java.sql。* classes。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 2 :(得分:0)
String expectedDateFormat=getDateFromString("2016-05-21 00:00:00","yyyy-MM-dd HH:mm:ss","yyyy MM dd HH:mm:ss");
此方法将执行预期格式的实际格式。
public static String getDateFromString(String dateInString, String actualformat, String exceptedFormat) {
SimpleDateFormat form = new SimpleDateFormat(actualformat);
String formatedDate = null;
Date date;
try {
date = form.parse(dateInString);
SimpleDateFormat postFormater = new SimpleDateFormat(exceptedFormat);
formatedDate = postFormater.format(date);
} catch (Exception e) {
e.printStackTrace();
}
return formatedDate;
}
答案 3 :(得分:-1)
public class test {
public static void main(String [] args) {
// ref http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss");
System.out.println("Current Date: " + simpleDateFormat.format(new Date()));
}
}
了解有关SimpleDateFormat
的更多信息答案 4 :(得分:-2)
试试这种方式
String d = "2016-05-21 00:00:00";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
Date myDate = null;
try {
myDate = df.parse(d);
} catch (ParseException e) {
e.printStackTrace();
}
修改强>
String d = "2016-05-21 00:00:00";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
Date myDate = null;
try {
myDate = df.parse(d);
} catch (ParseException e) {
e.printStackTrace();
}