我无法将字符串解析为日期
public class Main {
public static void main(String s[])
{
SimpleDateFormat mdyFormat1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ");
String date="2015-08-27T11:46:35.336Z";
try {
Date date1=mdyFormat1.parse(date);
System.out.println(date1);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
收到错误
java.text.ParseException: Unparseable date: "2015-08-27T11:46:35.336Z"
at java.text.DateFormat.parse(Unknown Source)
at com.connectm.onprocess.logincontroller.Main.main(Main.java:14)
答案 0 :(得分:1)
你有两个问题:
2015-08-27T11:46:35.336Z
,冒号(:)在46到35之间,应该是。 (点)。至于格式new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ")
。所以它应该是2015-08-27T11:46.35.336Z
。而Z则是下一个问题。答案 1 :(得分:1)
请注意,mdyFormat1
对象初始化已从
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm.ss.SSSZ");
到
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
public static void main(String[] args) {
SimpleDateFormat mdyFormat1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String date="2015-08-27T11:46:35.336Z";
try {
Date date1=mdyFormat1.parse(date);
System.out.println(date1);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
输出:
8月27日星期四11:46:35 CDT 2015
答案 2 :(得分:1)
正如其他人所指出的,您的格式化模式无法与输入数据匹配。
此外,您使用的是过时的旧类,这些类已被证明是麻烦,混乱和有缺陷的。在Java 8及更高版本中,它们已被新内置的java.time框架所取代。
您的输入数据采用标准ISO 8601格式。默认情况下,在java.time中使用该格式来解析和生成日期时间值的字符串表示。因此,无需指定格式化程序。
Instant instant = Instant.parse( "2015-08-27T11:46:35.336Z" );
String output = instant.toString();
如果需要,您可以指定时区。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );