当前位置: 首页 > 知识库问答 >
问题:

JavaLocalDateTime解析错误[重复]

舒浩邈
2023-03-14

我已经试了4个小时来解决这个问题。

:这很有效

String date = "Jul-01-2014 09:10:12";
LocalDateTime dt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("MMM-dd-yyyy HH:mm:ss", Locale.US));

:这不会

String date = "JUL-01-2014 09:10:12";
LocalDateTime dt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("MMM-dd-yyyy HH:mm:ss", Locale.US));

唯一的区别是月份全部大写。7月工程的适当案例。7月或7月都不起作用。我还尝试了“LLL”的模式,但运气不好。我错过了什么??

共有3个答案

郗福
2023-03-14

尝试使用DateTimeFormatterBuilder并使解析器不区分大小写。不要忘记指定区域设置。否则,MMM可能无法在默认语言环境中分析月份缩写:

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

LocalDate.parse("03-jun-2015", format);
宰父冠玉
2023-03-14

官方API似乎不支持这一点。

Symbol  Meaning                     Presentation      Examples
  ------  -------                     ------------      -------
   G       era                         text              AD; Anno Domini; A
   u       year                        year              2004; 04
   y       year-of-era                 year              2004; 04
   D       day-of-year                 number            189
   M/L     month-of-year               number/text       7; 07; Jul; July; J
   d       day-of-month                number            10

每年的月份只有一个选项,它没有明确提到任何支持三个大写月份的格式。

将其转换回Java可以尊重的格式并不十分困难;不过,这需要稍微弄虚作假,然后把日期放回一个字符串中。

下面的解决方案没有使用第三方那么优雅或干净,但其额外的好处是,不必依赖第三方库来编写此代码

public String transformToNormalizedDateFormat(final String input) {
    String[] components = input.split("-");
    String month = components[0];
    if(month.length() > 3) {
        throw new IllegalArgumentException("Was not a date in \"MMM\" format: " + month);
    }
    // Only capitalize the first letter.
    final StringBuilder builder = new StringBuilder();
    builder.append(month.substring(0, 1).toUpperCase())
            .append(month.substring(1).toLowerCase())
            .append("-");
    final StringJoiner stringJoiner = new StringJoiner("-");
    Arrays.stream(components, 1, components.length).forEach(stringJoiner::add);
    builder.append(stringJoiner.toString());
    return builder.toString();
}
白宏大
2023-03-14

显然我需要花5个小时在这上面。在编写扩展以提供解决方法时,我发现了这一点。

    String date = "01-JUL-2014 09:10:12";

    DateTimeFormatterBuilder fmb = new DateTimeFormatterBuilder();
    fmb.parseCaseInsensitive();
    fmb.append(DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm:ss"));

    LocalDateTime dt = LocalDateTime.parse(date, fmb.toFormatter());

适用于所有大小写样式。

 类似资料:
  • 我使用XAMPP,我所做的是尝试连接到phpmyadmin上的数据库,但是提示了一个错误,说语法错误,但是代码是正确的。 解析错误:语法错误,在第10行C:\xampp\htdocs\csgopit\connect.php中出现意外的“{” 代码本身非常简单,我不明白为什么它不能工作。

  • 嗨我正试着这么做 我遵循以下步骤: 从url获取数据 用zlib.gunzip解压 将解码数据转换为字符串 替换所有换行符和喙语句 我正在尝试解析抛出错误的字符串 使用JSON解析数据时出错。解析,这是github的公共数据集。我不知道我哪里出错了,谁能帮我一下吗。

  • 问题内容: 这个问题已经在这里有了答案 : 参考-此错误在PHP中意味着什么? (36个答案) 6年前关闭。 完全错误:解析错误:语法错误,意外的’‘(T_ENCAPSED_AND_WHITESPACE),期望的标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING) 它说错误在第12行上。 任何帮助将不胜感激! 问题答案: 您有多余的单引号:

  • 我想尝试用于Android开发的Intellij平台,但即使在新鲜之后,它也显示Gradle失败。请帮助。 我试过调整线路 一些其他版本,但没有效果。 这是我的模块级Gradle 这是我的项目级别 Gradle Intellij构建gradles时我得到的错误是

  • 请帮我纠正这个错误。分析错误:语法错误,第36行的/aaa/dsearch.php中出现意外的“sonum”(T_字符串)

  • 编译器输出: 18:4:错误:重新定义'模板T随机::get(T, T)'12:4:注意:'模板T随机::get(T, T)'之前在这里声明在函数'int main()': 28:44:错误:没有匹配函数调用'get(浮动,浮动)'28:44:注意:候选是: 12:4:注意:模板T随机::get(T, T)12:4:注意:模板参数推导/替换失败: 这项工作很好: 还有这个: 为什么编译器无法在第一