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
Parser Exception for format EEEE, MMMM d, YYYY h:mm:ss a z
提问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 SimpleDateFormat
does 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.US
as 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 SimpleDateFormat
instead. 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");