Java SimpleDataFormat仅限于预定义的结束日期

Java SimpleDataFormat仅限于预定义的结束日期,java,date-format,simpledateformat,Java,Date Format,Simpledateformat,我正在执行以下代码: SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy hh:mmaa"); df.setTimeZone(TimeZone.getTimeZone("America/New_York")); Date parsedDate = df.parse("Dec 19, 2011 2:37pm"); 结果是: java.text.ParseException: Unparseable date: "Dec 19, 20

我正在执行以下代码:

SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy hh:mmaa");
df.setTimeZone(TimeZone.getTimeZone("America/New_York"));
Date parsedDate = df.parse("Dec 19, 2011 2:37pm");
结果是:

java.text.ParseException: Unparseable date: "Dec 19, 2011 2:37pm"
据我所知:

Dec 19, 2011 2:37pm

year -> yyyy -> 2011
month -> MMM -> Dec
day in month -> d -> 2
a -> AM/PM -> pm
minute -> mm -> 37
Hour (1-12, AM/PM) -> h -> 3

格式有什么问题?

MMMM
-整月(“12月”)

MMM
-短月(“十二月”)

h
-12小时格式的短时间(2)

hh
-12小时格式的两位数小时(02)

创建
SimpleDataFormat
实例时,请始终使用区域设置:

SimpleDateFormat df = new SimpleDateFormat("MMM d, yyyy h:mmaa", Locale.US);

MMMM
-整月(“12月”)

MMM
-短月(“十二月”)

h
-12小时格式的短时间(2)

hh
-12小时格式的两位数小时(02)

创建
SimpleDataFormat
实例时,请始终使用区域设置:

SimpleDateFormat df = new SimpleDateFormat("MMM d, yyyy h:mmaa", Locale.US);

您必须指定区域设置:

SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy hh:mmaa", Locale.US);

因为月份的名称取决于它。

您必须指定区域设置:

SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy hh:mmaa", Locale.US);


因为月份的名称取决于它。

您的格式是
MMMM
,而不是
MMM
。此外,您还指定了
hh
,这表示“两位数小时”,而
h
表示“一位数小时”。(否则将是02:37),您可能也希望使用
d
而不是
dd
。好的,设置dd:mmaa和使用例如2:37 pm有问题吗?因为它是这样工作的……你是说
hh:mmaa
?我有点惊讶它能工作,但无论如何我都会修改它,这样你的代码就能反映你的意图——你实际上不需要两位数,所以你不应该指定它们。只需使用
h
即可。您的格式是
MMMM
,而不是
MMM
。此外,您还指定了
hh
,这表示“两位数小时”,而
h
表示“一位数小时”。(否则将是02:37),您可能也希望使用
d
而不是
dd
。好的,设置dd:mmaa和使用例如2:37 pm有问题吗?因为它是这样工作的……你是说
hh:mmaa
?我有点惊讶它能工作,但无论如何我都会修改它,这样你的代码就能反映你的意图——你实际上不需要两位数,所以你不应该指定它们。只需使用
h
即可。是的,这就是问题所在。。。本地我怀疑OP真的想要
d
而不是
dd
。但这至少比目前公认的答案更接近:)@JonSkeet我相信这个问题值得评论,而不是回答。。。但是我想要2000。是的,这就是问题所在。。。本地我怀疑OP真的想要
d
而不是
dd
。但这至少比目前公认的答案更接近:)@JonSkeet我相信这个问题值得评论,而不是回答。。。但是我想要2000。好的。。。我正在考虑删除这篇帖子。。。。对于这个问题,我收到了否定的回答:-O我试图搜索这个问题,但通过格式化,一切都“正确”。但是区域设置是必需的。@Orochi如果您的问题得到了回答,您不能删除它。这并不反映所要求的格式,它有一个缩写的月份名称和一个1或2位数的小时;我怀疑OP应该使用
“mmmd,yyyyy h:mmaa”
。指定区域设置也很重要,这个解决方案确实有效,但实际上并不适合数据。@Jens:是的,但这并不意味着保留不正确的格式规范是好的。数据有一个缩写的月份名称-因此请指定该名称。数据中有一个小时的数字-因此请指定。我怀疑数据中也会有一个月中某一天的单位数字,所以请具体说明。您不认为传递给
SImpleDateConstructor
的格式应该反映预期的数据吗?好的。。。我正在考虑删除这篇帖子。。。。对于这个问题,我收到了否定的回答:-O我试图搜索这个问题,但通过格式化,一切都“正确”。但是区域设置是必需的。@Orochi如果您的问题得到了回答,您不能删除它。这并不反映所要求的格式,它有一个缩写的月份名称和一个1或2位数的小时;我怀疑OP应该使用
“mmmd,yyyyy h:mmaa”
。指定区域设置也很重要,这个解决方案确实有效,但实际上并不适合数据。@Jens:是的,但这并不意味着保留不正确的格式规范是好的。数据有一个缩写的月份名称-因此请指定该名称。数据中有一个小时的数字-因此请指定。我怀疑数据中也会有一个月中某一天的单位数字,所以请具体说明。您不认为传递给
SImpleDateConstructor
的格式应该反映预期的数据吗?