java 格式 EEEE、MMMM d、YYYY h:mm:ss az 的解析器例外

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16567091/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 23:19:38  来源:igfitidea点击:

Parser Exception for format EEEE, MMMM d, YYYY h:mm:ss a z

javadatetimedatetime-format

提问by Adam Siemion

I'm getting parser exception on trying to parse string value:

我在尝试解析字符串值时遇到解析器异常:

"Thursday, July 27, 2006 10:10:02 PM PST" 

To format:

格式化:

"EEEE, MMMM d, YYYY h:mm:ss a z"

This is the program sample:

这是程序示例:

DateTime.parse("Thursday, July 27, 2006 10:10:02 PM PDT", DateTimeFormat.forPattern("EEEE, MMMM d, yyyy h:mm:ss a z"));

And this is the error message:

这是错误消息:

Invalid format: "Thursday, July 27, 2006 10:10:02 PM PDT" is malformed at "PDT"


this is my sample program

这是我的示例程序

String str = "Thursday, July 27, 2006 10:10:02 PM PDT"; 
DateTimeFormatter formatterDateTime = DateTimeFormat.forPattern("EEEE, MMMM d, YYYY h:mm:ss a z");
try{
    DateTime dt = DateTime.parse(str, formatterDateTime);
}catch(Exception ex)
{
    System.out.println(ex.getMessage());
}

回答by Reimeus

From the JodaTime docs:

来自 JodaTime文档

Zone names: Time zone names ('z') cannot be parsed.

时区名称:无法解析时区名称 ('z')。

However SimpleDateFormatdoes support parsing of timezones.

但是SimpleDateFormat确实支持解析时区。

SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM dd, YYYY h:mm:ss aa zzz");
Date date = format.parse("Thursday, July 27, 2006 10:10:02 PM PST");

回答by Adam Siemion

As suggested by marba, the error most likely is caused by using Java 7 specific pattern with a Java 6.

正如 marba 所建议的那样,该错误很可能是由将 Java 7 特定模式与 Java 6 一起使用引起的。

Your code for parsing the date can look like this:

您解析日期的代码如下所示:

SimpleDateFormat df = new SimpleDateFormat("EEEE, MMMM dd, yyyy h:mm:ss aa zzz");
Date d = df.parse("Thursday, July 27, 2006 10:10:02 PM PST");

To test that the parsed date is the same as the provided date:

要测试解析的日期是否与提供的日期相同:

df.setTimeZone(TimeZone.getTimeZone("Pacific/Pitcairn"));
System.out.println(df.format(d));

Prints:

印刷:

Thursday, July 27, 2006 10:10:02 PM PST

Refer to the Javadocfor more patterns.

有关更多模式,请参阅Javadoc

回答by hoaz

What locale do you use? I think you have to explicitly provide Locale.USas a second parameter to SimpleDateFormat.

你使用什么语言环境?我认为您必须明确提供Locale.US作为SimpleDateFormat.

For Joda-Time library you can use following code to adjust locale:

对于 Joda-Time 库,您可以使用以下代码来调整语言环境:

DateTimeFormat.forPattern("EEEE, MMMM d, YYYY h:mm:ss a z").withLocale(Locale.US);

Update: Just found this related SO question, looks like you need to use SimpleDateFormatinstead. Joda-Time parser does not support time zones:

更新:刚刚发现这个相关的问题,看起来你需要SimpleDateFormat改用。Joda-Time 解析器不支持时区:

SimpleDateFormat df = new SimpleDateFormat("EEEE, MMMM d, YYYY h:mm:ss a z");
Date d = df.parse("Thursday, July 27, 2006 10:10:02 PM PDT");