**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
13天前关门了。
改进这个问题
public static void main(String[] args) {
String dateValidator = "dMMMMyyyy";
SimpleDateFormat format = null;
format = new SimpleDateFormat(dateValidator);
String test = format.format(new Date());
Date value = null;
try {
value = format.parse(test);
System.out.println(value.toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
为什么Java8中只有一个特定的掩码失败了呢?
预期结果:打印今天的日期(例如12月28日)。
观察结果:
java.text.ParseException: Unparseable date: "2812月2020"
at java.base/java.text.DateFormat.parse(DateFormat.java:395)
at Main.main(Main.java:20)
第20行是这一行:
value = format.parse(test);
1条答案
按热度按时间4nkexdtk1#
java.time文件
我建议您在日期工作中使用java.time,这是一种现代的java日期和时间api。我不知道你到底想做什么,所以这里只是一个在给定时区打印今天日期的简单示例:
刚才运行时输出:
2020-12-27
如果您无法负担升级到java.time的遗留api,那么您需要一个老式的api
Date
表示时区中一天开始的对象:12月27日星期日00:00:00 jst 2020
你的代码哪里出错了?
您的代码适用于大多数地区。不过,live和let live在评论中提到locale是正确的:在一些locale中,例如日语,公历的月份似乎没有名称,所以即使这样,也会打印月份号和月份的单词
MMMM
在格式中,模式字符串表示完整的月份名称。例子:2712月2020
. 现在,当试图解析字符串时SimpleDateFormat
无法正确地将月份和月份之间的日期分隔开,解析失败并出现异常。更详细地说:
SimpleDateFormat
拿2712
是的,这是真的。接下来,它需要一个完整的月份名称,在本例中是一个月数,后跟月
. 因为它只看到月
,它抛出异常。所描述的问题存在于韩语、汉语(包括广东话和日语)中。
链接
oracle教程:date time解释如何使用java.time。