Java 解析日期YYYY-MM-DD时出现异常HH:MM:ss

Java 解析日期YYYY-MM-DD时出现异常HH:MM:ss,java,date,formatting,Java,Date,Formatting,我尝试以YYYY-MM-DD HH:MM:ss格式解析日期 String now = "2012-11-02 12:02:00"; DateFormat formatter; formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); Date date_temp = (Date) formatter.parse(now.toString()); System.out.println("output: " + date_temp

我尝试以YYYY-MM-DD HH:MM:ss格式解析日期

String now = "2012-11-02 12:02:00";
DateFormat formatter;
formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
Date date_temp = (Date) formatter.parse(now.toString());
System.out.println("output: " + date_temp);
它给了我以下的例外

java.text.ParseException: Unparseable date: "2012-11-02 12:02:00"

是的,您已经用一种格式创建了一个格式化文件(“EEE-MMM-dd-HH:mm:ss-z-yyyy”),然后给它一个完全不同格式的字符串进行解析。你为什么认为那会起作用?试试这个:

// Locale specified to avoid any cultural differences. You may also
// want to specify the time zone.
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                                            Locale.US);
Date date = formatter.parse(now);
请注意,解析的
日期
不知道任何有关格式的信息-调用
toString()
(正如您在这里隐式执行的那样)的结果始终只是JRE默认时区中的默认格式。如果要以特定格式打印,请再次使用
SimpleDateFormat


还要注意,我已经将变量的声明和初始化结合起来。比起在一行中声明一个变量并在以后给它一个初始值,你更愿意这样做。

是的,你已经创建了一个用一种格式格式化的变量(“EEE-MMM-dd-HH:mm:ss-z-yyyy”),然后给它一个完全不同格式的字符串进行解析。你为什么认为那会起作用?试试这个:

// Locale specified to avoid any cultural differences. You may also
// want to specify the time zone.
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                                            Locale.US);
Date date = formatter.parse(now);
请注意,解析的
日期
不知道任何有关格式的信息-调用
toString()
(正如您在这里隐式执行的那样)的结果始终只是JRE默认时区中的默认格式。如果要以特定格式打印,请再次使用
SimpleDateFormat


还要注意,我已经将变量的声明和初始化结合起来。比起在一行中声明一个变量并在以后给它一个初始值,你更愿意这样做。

当然你的
日期字符串
不是你在
SimpleDataFormat
中使用的
格式。因此,它将无法将其解析为
日期对象

尝试使用以下方法:-

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

当然,您的
日期字符串
不是您在
SimpleDateFormat
中使用的
格式。因此,它将无法将其解析为
日期对象

尝试使用以下方法:-

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

仅供参考,您不需要在
now
上调用
toString()
,因为
now
已经是一个字符串。另外,
DateFormat.parse
返回一个
Date
,因此您不需要将其强制转换为
Date
。仅供参考,您不需要在
now
上调用
toString()
,因为
now
已经是一个字符串。另外,
DateFormat.parse
返回一个
Date
,因此您不需要将其强制转换为
Date