DateTimeParseException:无法在索引 2 [duplicate] 处解析文本“1-Aug-2018”

DateTimeParseException: Text '1-Aug-2018' could not be parsed at index 2 [duplicate]

提问人:Terrible Tadpole 提问时间:10/18/2023 更新时间:10/18/2023 访问量:56

问:

我需要以制表符分隔文件的形式处理数据,日期格式为 dd-MMM-yyyy,例如 2018 年 8 月 1 日或 2023 年 9 月 15 日。我的代码是:

    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern ("d-MMM-uuuu");
private LocalDateTime toDate (String raw) {
       LocalDateTime date = LocalDateTime.parse (raw, DATE_FORMATTER);
    return date;
}

我的例外是:

线程“main”java.time.format.DateTimeParseException 中的异常:无法在索引 2 处解析文本“1-Aug-2018”

完成的研究:

  • 仔细阅读 Oracle Java 文档
  • 尝试过而不是,但这只是将索引移动到 0 而不是 2ddd
  • 尝试而不是(出于绝望,问题显然不存在)yyyyuuuu
  • 在互联网上搜索了一个小时,但我使用 DateTimeFormatter 的模式的几个示例(而不是 SimpleDate,没有人清理过 Internet 上的旧垃圾吗?!)使用它来格式化输出而不是解析输入。
  • 又花了一个小时拖网 StackOverflow,对于过时的解决方案,这甚至比一般的互联网还要糟糕(尽管答案更专业),但所有答案似乎都涉及不同的模式,我看不出代码有任何差异

有什么建议吗?还是相关答案的指示?

Java DateTimeFormatter DateTimeParseException

评论

1赞 MC Emperor 10/18/2023
您的系统区域设置是什么?换句话说,什么是回报?Locale.getDefault()
1赞 Elliott Frisch 10/18/2023
指定英语。private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern ("dd-MMM-yyyy", Locale.ENGLISH);
3赞 MadProgrammer 10/18/2023
您的输入不包含时间值,因此我认为使用可能不是一个好的起点,但如前所述,这可能是一个本地化问题LocalDateTimeLocalDate
0赞 Anonymous 10/18/2023
当然,无论其他人以前遇到过同样的问题,这个都不容易搜索。
1赞 Anonymous 10/18/2023
解析失败时,一个有用的技巧是:尝试使用相同的格式化程序 .现在你应该看到这个月以不同的语言和/或用小而不是大写字母出现,这可能会引导你朝着正确的方向前进。LocalDateTime.of(2018, 8, 1, 0, 0, 0) .format(DATE_FORMATTER)aA

答: 暂无答案