SimpleDataFormat不使用dmmmmyyyy进行解析?

1szpjjfi  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(213)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

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);
4nkexdtk

4nkexdtk1#

java.time文件

我建议您在日期工作中使用java.time,这是一种现代的java日期和时间api。我不知道你到底想做什么,所以这里只是一个在给定时区打印今天日期的简单示例:

LocalDate today = LocalDate.now(ZoneId.of("Asia/Tokyo"));
    System.out.println(today);

刚才运行时输出:
2020-12-27
如果您无法负担升级到java.time的遗留api,那么您需要一个老式的api Date 表示时区中一天开始的对象:

Instant startOfDay = today.atStartOfDay(ZoneId.systemDefault()).toInstant();
    Date oldfashionedDate = Date.from(startOfDay);
    System.out.println(oldfashionedDate);

12月27日星期日00:00:00 jst 2020

你的代码哪里出错了?

您的代码适用于大多数地区。不过,live和let live在评论中提到locale是正确的:在一些locale中,例如日语,公历的月份似乎没有名称,所以即使这样,也会打印月份号和月份的单词 MMMM 在格式中,模式字符串表示完整的月份名称。例子: 2712月2020 . 现在,当试图解析字符串时 SimpleDateFormat 无法正确地将月份和月份之间的日期分隔开,解析失败并出现异常。
更详细地说: SimpleDateFormat2712 是的,这是真的。接下来,它需要一个完整的月份名称,在本例中是一个月数,后跟 . 因为它只看到 ,它抛出异常。
所描述的问题存在于韩语、汉语(包括广东话和日语)中。

链接

oracle教程:date time解释如何使用java.time。

相关问题