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

时间:2010-12-21 04:45:54

标签: java date format

如何将下面的日期字符串解析为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)

6 个答案:

答案 0 :(得分:169)

模式错误。您有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

根据我的时区是正确的。

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

答案 1 :(得分:13)

这是一个有效的例子:

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

答案 2 :(得分:11)

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); 

这样可以吗?

答案 3 :(得分:7)

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/Y2cRrZZZ

检查这些Z(在线ID)

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

答案 4 :(得分:4)

我遇到了这个问题,我将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"

答案 5 :(得分:0)

解析异常是一个已检查的异常,因此在处理将字符串解析为日期时必须使用try-catch捕获它,正如@miku建议的那样......