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

在JSR 310中如何处理大写或小写?

苏高旻
2023-03-14
问题内容

如果一个月的大写或小写(即不是标题),则DateTimeFormatter无法解析日期。有没有简单的方法可以将日期转换为标题大小写,还是可以使格式化程序更宽松?

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

问题答案:

DateTimeFormatters是严格的,默认情况下区分大小写。使用DateTimeFormatterBuilder和指定parseCaseInsensitive()以区分大小写。

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

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

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()在年份部分之前指定,它还将"2015-JAN-12"正确解析4位数字的年份(即)。



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

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

  • 我很惊讶,节点的原始大小显然是在中控制的。我们有两个愚蠢的方法和仅此而已。 事件在哪里,可观察的属性在哪里,所有这些进步的东西在哪里?被遗忘了?欢迎视窗3.1应用编程接口? 我的印象是不是错了?请修理我。 如何绑定节点边界?如何同步调整一个节点的大小和另一个节点的大小?如何将一个节点放入另一个节点?如何使内部节点推送外部节点的大小? 如何将一些动作与节点调整大小联系起来?

  • 问题内容: 老的C程序员可以在Swift上使用一些帮助。 我对if-case语法不了解。例如: 在似乎是在条件测试语句。因此,最初让我感到困惑的是看到使用赋值运算符(’=’)而不是比较运算符(’==’)。 好的,我想自己,这可能意味着该语句实际上是一个返回布尔值的函数调用。然后,返回的值将满足语句中的比较测试。 作为实验,我尝试将语句像常规条件测试一样对待,并在其周围加上括号。斯威夫特乐于接受或。

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

  • 问题内容: 我想更改一个字符串,以使所有大写字母变为小写,并且所有小写字母变为大写。数字字符将被忽略。 因此“ AbCdE123”成为“ aBcDe123” 我猜应该有一种方法可以遍历String并翻转每个字符,或者某些可以完成此操作的正则表达式。 问题答案: 我不相信有任何内置功能可以做到这一点(这是相对不常见的)。不过应该这样做: 请注意,这不会像String.toUpperCase / St