关于java:如何将日期字符串解析为Date?

How to parse date string to Date?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
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);

引发异常…

1
2
java.text.ParseException: Unparseable date:"Thu Sep 28 20:29:30 JST 2000"
        at java.text.DateFormat.parse(DateFormat.java:337)


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

1
2
3
4
5
6
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);
}

这里有指纹

1
Thu Sep 28 07:29:30 BOT 2000

根据我的时区,这是正确的。

如果你不想用HH代替kk,我也会重新考虑。有关有效模式的详细信息,请阅读javadoc。


下面是一个工作示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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();
        }
    }
}

将打印:

1
Thu Sep 28 13:29:30 CEST 2000


1
2
3
4
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);

这行吗?


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

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

仍然运行。但是,如果您的代码抛出异常,则是因为您的工具或JDK或任何其他原因。因为在我的IDE中也有同样的错误,但是请用z z z和z检查http://ideone.com/y2crr(在线IDE)

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


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

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

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


分析异常是选中的异常,因此在将字符串解析为日期时,必须使用try catch来捕获它,正如@miku建议的那样…