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

mas*_*san 114 java format date

如何将下面的日期字符串解析为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);  
Run Code Online (Sandbox Code Playgroud)

抛出异常......

java.text.ParseException: Unparseable date: "Thu Sep 28 20:29:30 JST 2000"
        at java.text.DateFormat.parse(DateFormat.java:337)
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 173

模式是错误的.你有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);
}
Run Code Online (Sandbox Code Playgroud)

这打印在这里

Thu Sep 28 07:29:30 BOT 2000

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

如果你不愿意用HH而不是,我也会重新考虑kk.有关有效模式的详细信息,请阅读javadoc.

  • 顺便问一下,这个日期字符串来自哪里?它看起来非常像`java.util.Date #toString()`的默认结果.你不是在做错事吗?(将日期作为字符串而不是日期传递) (4认同)
  • 在这里工作正常.它是合法有效的.你必须更清楚这个"错误".至于传递值,我宁愿使用固定的相同模式进行格式化(在HTML中显示/编辑)和解析(处理请求参数).例如`yyyy-MM-dd HH:mm:ss`. (3认同)

mik*_*iku 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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

将打印:

Thu Sep 28 13:29:30 CEST 2000
Run Code Online (Sandbox Code Playgroud)

  • 我已经尝试过了..它不起作用:( (2认同)

Fer*_*lho 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); 
Run Code Online (Sandbox Code Playgroud)

这工作正常吗?

  • 我想你的意思是:"dd-MM-yyyy HH:mm:ss" (8认同)

小智 7

new SimpleDateFormat("EEE MMM dd kk:mm:ss ZZZ yyyy");
Run Code Online (Sandbox Code Playgroud)

new SimpleDateFormat("EEE MMM dd kk:mm:ss Z yyyy");
Run Code Online (Sandbox Code Playgroud)

仍在运行.但是,如果您的代码抛出异常,那是因为您的工具或jdk或任何其他原因.因为我的IDE中出现了相同的错误,但请使用ZZZZ检查这些http://ideone.com/Y2cRr(在线ide)

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