有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

SimpleDataFormat如何在Java中使用DateFormat解析月份完整格式字符串?

我试过这个:

DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy");
Date d = fmt.parse("June 27, 2007");

错误:

Exception in thread "main" java.text.ParseException: Unparseable date: "June 27, 2007"

java文档说我应该使用四个字符来匹配完整的表单。 我只能成功地使用MMM和缩写月份,如“Jun”,但我需要匹配完整的表格

Text: For formatting, if the number of pattern letters is 4 or more, the full form is used; otherwise a short or abbreviated form is used if available. For parsing, both forms are accepted, independent of the number of pattern letters.

https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html


共 (2) 个答案

  1. # 1 楼答案

    您可能正在使用的区域设置中,月份名称不是“一月”、“二月”等,而是本地语言中的其他一些单词

    尝试指定要使用的区域设置,例如Locale.US

    DateFormat fmt = new SimpleDateFormat("MMMM dd, yyyy", Locale.US);
    Date d = fmt.parse("June 27,  2007");
    

    此外,日期字符串中还有一个额外的空格,但实际上这对结果没有影响。这两种方法都有效

  2. # 2 楼答案

    来自java的LocalDate。时间

    使用java中的LocalDate。时间,现代Java日期和时间API,用于日期

        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MMMM d, u", Locale.ENGLISH);
        LocalDate date = LocalDate.parse("June 27, 2007", dateFormatter);
        System.out.println(date);
    

    输出:

    2007-06-27

    正如其他人已经说过的,当字符串是英语时,请记住指定一个说英语的区域设置。ALocalDate是一个没有时间的日期,因此比旧的Date类更适合字符串中的日期。尽管它的名字是Date,但它并不代表一个日期,而是一个时间点,在世界上不同的时区至少有两个不同的日期

    只有当你需要一个老式的Date来开发一个你无法升级到java的API时。刚才的时间,像这样转换:

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

    我所在时区的输出:

    Wed Jun 27 00:00:00 CEST 2007

    链接

    解释如何使用java。时间到了