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

如何处理JSR 310中的大写或小写?[副本]

范侯林
2023-03-14

如果月份是大写或小写,即不是标题大小写,DateTimeForware无法解析日期。有没有简单的方法将日期转换为标题大小写,或者有没有方法使格式化程序更宽松?

for (String date : "15-JAN-12, 15-Jan-12, 15-jan-12, 15-01-12".split(", ")) {
    try {
        System.out.println(date + " => " + LocalDate.parse(date,
                                     DateTimeFormatter.ofPattern("yy-MMM-dd")));
    } catch (Exception e) {
        System.out.println(date + " => " + e);
    }
}

指纹

15-JAN-12 => java.time.format.DateTimeParseException: Text '15-JAN-12' could not be parsed at index 3
15-Jan-12 => 2015-01-12
15-01-12 => java.time.format.DateTimeParseException: Text '15-01-12' could not be parsed at index 3
15-jan-12 => java.time.format.DateTimeParseException: Text '15-jan-12' could not be parsed at index 3

共有1个答案

伍弘盛
2023-03-14

默认情况下,DateTimeFormatter是严格且区分大小写的。使用DateTimeFormatterBuilder并指定ParseCaseSensitive()来分析不区分大小写的内容。

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .parseCaseInsensitive()
    .appendPattern("yy-MMM-dd")
    .toFormatter(Locale.US);

为了能够解析数字月份(即15-01-12),您还需要指定ParseLenent()。

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .parseCaseInsensitive()
    .parseLenient()
    .appendPattern("yy-MMM-dd")
    .toFormatter(Locale.US);

您还可以更详细地仅将月份部分指定为不区分大小写/宽松:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendPattern("yy-")
    .parseCaseInsensitive()
    .parseLenient()
    .appendPattern("MMM")
    .parseStrict()
    .parseCaseSensitive()
    .appendPattern("-dd")
    .toFormatter(Locale.US);

理论上,这可能会更快,但我不确定是否会更快。

PS:如果在年份部分之前指定parseLenient(),它也会正确解析4位年份(即"2015-JAN-12")。

 类似资料:
  • 问题内容: 如果一个月的大写或小写(即不是标题),则DateTimeFormatter无法解析日期。有没有简单的方法可以将日期转换为标题大小写,还是可以使格式化程序更宽松? 版画 问题答案: s是严格的,默认情况下区分大小写。使用和指定以区分大小写。 为了能够解析数字月份(即),您还需要指定。 您也可以更冗长地指定仅月份部分为不区分大小写/宽大: 从理论上讲,这可能会更快,但我不确定是否可以。 P

  • 所以,我试着做一个简单的带有开关的菜单。 还要注意:我使用旧版本的Java和NetBeans8.2作为IDE。(因为我的学院一直坚持不使用新的。可能是因为他们还没有课本。),所以可能新的语法不起作用。 我的代码:

  • jsr-310有一个方便的类,它允许您构造。我特别喜欢方法-请参见javadoc 但感觉应该有更简单的方法...

  • 我已经研究了大多数问题,但我找不到如何在一个单词中使用大写或小写特定字符。 例子: 如果我想使“b”大写,其余字母小写,那么如何使第一个字母大写,其余字母小写呢? 比如“约翰” 我有和。他们转换整个文本。 我也试着加入charAt,但从未与我合作过。

  • 问题内容: 我以为这是很普通的事情,但是我找不到如何在AngularJS中处理它。假设我有一个事件列表,想用AngularJS输出它们,那很简单: 但是,当列表为空时如何处理?我想要一个消息框,其中的列表带有类似“无事件”或类似内容。唯一接近的是with (如何检查对象而不是数组时是否为空?),但这真的是我唯一的选择吗? 问题答案: 您可以使用ngShow。 参见示例。 或者您可以使用ngHide

  • 问题内容: 我遇到的问题是我无法让我的密码验证程序来检查字符串,以确保其中的一个字符为大写字母,而一个字符为小写字母,它将检查整个字符串中是否存在一个字符。其他,并根据要检查的语句打印错误消息。 我已经查看了该站点和Internet上的答案,但是找不到。这是功课。 下面是我当前的代码。 问题答案: 要确定字符串是否包含大写和小写字符,可以使用以下命令: 这使您可以检查: 本质上,这通过检查Stri