当前位置: 首页 > 面试题库 >

dd-MMM-yyyy格式的java.time.format.DateTimeParseException

贝研
2023-03-14
问题内容

我正在尝试解析dd-MMM-yyyy格式的日期。

package com.company;

import javax.swing.text.DateFormatter;
import java.time.format.DateTimeFormatter;

import java.time.*;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {
        // write your code here
        MonthDay m;
        Locale.setDefault(Locale.ENGLISH);
        DateTimeFormatter dTF = DateTimeFormatter.ofPattern("dd-MMM-yyyy");
        String dateString = "12-jan-1900";

        try
        {
            LocalDate ddd = LocalDate.parse(dateString,dTF);
            System.out.println(ddd.toString());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        //System.out.println(d.toString());

    }
}

它引发以下异常

java.time.format.DateTimeParseException: Text '12-jan-1900' could not be parsed at index 3
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.LocalDate.parse(LocalDate.java:400)
    at com.company.Main.main(Main.java:20)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

它可以解析dd-MM-yyyy格式,但是格式失败dd-MMM-yyyy。我Locale.US也很累设定,但是在那种情况下也失败了。


问题答案:

原因是解析默认情况下区分大小写,并且格式化程序无法识别"jan"。它只会识别"Jan"

您可以使用DateTimeFormatterBuilder并调用来构造不区分大小写的解析器parseCaseInsensitive()

将格式样式的其余部分的解析样式更改为不区分大小写。

解析可以区分大小写或不区分大小写-默认情况下区分大小写。此方法允许更改区分大小写的解析设置。

DateTimeFormatter dTF = 
    new DateTimeFormatterBuilder().parseCaseInsensitive()
                                  .appendPattern("dd-MMM-yyyy")
                                  .toFormatter();


 类似资料:
  • 我在MVC5 asp上使用dd/MMM/YYYY格式的日期时遇到问题。net项目。主要是在Chrome上,因为它似乎只接受yyyy/mm/dd格式的日期。 为了规范跨浏览器的行为,我使用了jQuery datetimepicker组件。 我尝试了很多方法,但Chrome仍然表示日期无效。即使在将输入定义为文本而不是日期之后。 此外,即使我关闭了特定组件的验证(data val=“false”),C

  • 问题内容: 我想将日期格式从“ MMM dd,yyyy HH:mm:ss a”更改为“ MM.dd”。我有以下代码 但是我在 请帮忙 问题答案: 三种可能的解释: 您的默认语言环境与输入日期不兼容-例如,它不能理解为月份名称 输入字符串有问题,或者 是错误的类型(例如而不是,或完全是其他类型),或者未声明。 您应该在问题中包括异常的详细信息以弄清是什么,但这是一个工作示例,基本上使用您自己的代码,

  • 问题内容: 我在日期解析示例日期上遇到了问题: 有例外 确实我想将此格式日期解析为yyyy-MM-dd我尝试: 采取:java.text.ParseException:无法解析的日期:“ 2013年10月16日星期三00:00:00 CEST” 好的,我更改为并工作: 问题答案: 我将假设对您来说是pl-PL因为您似乎在波兰。 因此,日期字符串中的英语单词会导致无法解析的日期。 一个合适的波兰日期

  • 在一个数据集中,我有一些日期时间,格式为EEE MMM dd hh:mm:ss zzz yyyyy,比如“mon 5月18日20:25:32 GMT+02:00202”。我如何在Python中以ISO格式和机器本地时间转换这个字符串?

  • 问题内容: 当我在下面的代码下运行时,出现Unparseable错误。如何将dd MMM yyyy格式转换为dd / MM / yyyy格式? 问题答案: 假设您修复了明显的语法错误,则: 您要做的就是为您需要解析的格式创建一个解析器,并为您想要的格式创建一个格式化器:

  • 问题内容: 可能重复: 扩展JavaScript的Date.parse以允许DD /MM/YYYY(非美国格式的日期)吗?将dd-mm-yyyy字符串转换为日期 在文本框中输入日期,例如: 05/09/1985,我想将其转换为1985年9月5日(dd-MMM-yyyy)格式。我将如何实现?请注意,源格式可以是或或格式。 代码段: 此代码返回 1985年 5月9 日, 但我希望 1985年9月5日