如何将日期字符串解析为日期?

如何将下面的日期字符串解析为 Date对象?

String target = "Thu Sep 28 20:29:30 JST 2000";
DateFormat df = new SimpleDateFormat("E MM dd kk:mm:ss z yyyy");
Date result =  df.parse(target);

抛出异常..。

java.text.ParseException: Unparseable date: "Thu Sep 28 20:29:30 JST 2000"
at java.text.DateFormat.parse(DateFormat.java:337)
358213 次浏览

Here is a working example:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.util.Date;


public class j4496359 {
public static void main(String[] args) {
try {
String target = "Thu Sep 28 20:29:30 JST 2000";
DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss zzz yyyy");
Date result =  df.parse(target);
System.out.println(result);
} catch (ParseException pe) {
pe.printStackTrace();
}
}
}

将印刷:

Thu Sep 28 13:29:30 CEST 2000

模式不对。你有一个3个字母的日期缩写,所以它必须是 EEE。你有一个3个字母的月份缩写,所以它必须是 MMM。由于那些日期和月份的缩写是区域设置敏感的,所以您希望将 SimpleDateFormat区域设置也显式地指定为英语,否则它将使用平台默认区域设置,这可能不是英语本身。

public static void main(String[] args) throws Exception {
String target = "Thu Sep 28 20:29:30 JST 2000";
DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH);
Date result =  df.parse(target);
System.out.println(result);
}

这里有指纹

Thu Sep 28 07:29:30 BOT 2000

which is correct as per my timezone.

I would also reconsider if you wouldn't rather like to use HH instead of kk. Read the javadoc for details about valid patterns.

new SimpleDateFormat("EEE MMM dd kk:mm:ss ZZZ yyyy");

还有

new SimpleDateFormat("EEE MMM dd kk:mm:ss Z yyyy");

还能跑。但是,如果代码抛出异常,那是因为您的工具或 jdk 或任何其他原因。因为 我也犯了同样的错误在我的 IDE 中,但是请检查这些 http://ideone.com/Y2cRr(在线 IDE)与 ZZZZ

输出为: Thu Sep 28 11:29:30 GMT 2000

我有这个问题,我把 Locale设置为 US,然后它就工作了。

static DateFormat visitTimeFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",Locale.US);

对于 String "Sun Jul 08 00:06:30 UTC 2012"

String target = "27-09-1991 20:29:30";
DateFormat df = new SimpleDateFormat("dd MM yyyy HH:mm:ss");
Date result =  df.parse(target);
System.out.println(result);

这样可以吗?

解析异常是经过检查的异常,因此在处理解析 String to Dates 时,必须使用 try-catch 捕获它,如@miku 所建议的..。