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

没有分隔符的本地日期分析不起作用

顾宏朗
2023-03-14

我在使用Java8的LocalDate和DateTimeFormatterBuilder解析这些日期时遇到了困难。

下面是我尝试解析日期的方法:

LocalDate.parse(
    "201804",
    new DateTimeFormatterBuilder().appendPattern("YYYYww").parseDefaulting(WeekFields.ISO.dayOfWeek(), 1).toFormatter()
);

执行将引发以下异常

LocalDate.parse(
    "2018 04",
    new DateTimeFormatterBuilder().appendPattern("YYYY ww").parseDefaulting(WeekFields.ISO.dayOfWeek(), 1).toFormatter()
);

共有1个答案

程瑞
2023-03-14

可以使用AppendValue

此方法支持称为“邻近值解析”的特殊解析技术。该技术解决了一个值(变量或固定宽度)后面跟着一个或多个固定长度值的问题。标准解析器是贪婪的,因此它通常会窃取固定宽度值解析器所需的数字,而固定宽度值解析器遵循可变宽度值解析器。

启动“相邻值解析”不需要任何操作。当调用appendValue时,生成器将进入相邻值解析设置模式。

LocalDate.parse(
                "201804",
                new DateTimeFormatterBuilder()
                        .appendValue(YEAR, 4)
                        .appendValue(ALIGNED_WEEK_OF_YEAR, 2)
                        .parseDefaulting(WeekFields.ISO.dayOfWeek(), 1).toFormatter()
        );
 类似资料:
  • 问题内容: 由生成的解析器表现出以下有趣的行为,这阻止了我编写模式来解析字符串,例如: 我调试了代码,似乎问题是由年份字段解析超出了字符串的末尾引起的(三个y的最大宽度始终为19)。但是,我不明白如果没有最后的文字,它如何对模式起作用。 有什么办法可以不必使用格式化程序生成器来解决此问题? 编辑: 由于下面的Jarrod确认这是越野车,因此我进行了更多的谷歌搜索,最后找到了错误报告: http:/

  • 尝试将“用户名:密码”从TextArea拆分为TextAreaUser和TextAreaPass,但当输入为“用户名:”或“:密码”时,它会停止。 堆栈跟踪 :

  • 问题内容: 我需要在SQL Server 2012中将一列中的字符串拆分为一个字符,并将每个字符串拆分成它自己的列。 例如:如果我有一个栏,我需要把它拆分成,,,,,与每个这些转化为自己列。 要拆分的列的长度可能会有所不同,因此我需要使其尽可能地动态。 问题答案: 您可以这样做: 输出: 这是动态版本:

  • 问题内容: 我有一个应用程序,其中的分隔符插入设置为自定义值-Right ,Left 。这在中可以完美使用,但是在我看到的分隔符插入设置为右侧的默认值。即使在xib文件中将其设置为,它仍然无法正确显示。 如何删除分隔页边距? 问题答案: iOS 8.0在单元格和表视图上引入了layoutMargins属性。 此属性在iOS 7.0上不可用,因此您需要确保在分配前检查一下! 简单的解决方法是对单元格

  • 如果使用带有单个参数的第一个StringToknenizer构造函数并编写示例程序,结果是和12个令牌。它返回没有任何空格的整个句子。我明白这是怎么回事。 如果使用带有两个参数的第二个构造函数,我的测试程序将得到每个单词有空格,但没有逗号,只有两个标记。我认为它应该同时将空格和逗号作为标记分隔符计算,但它将逗号之前的所有内容作为1标记计算,将逗号之后的所有内容作为1标记计算。这部分让我很困惑。 我

  • (我想)快速提问。如何将解析为(将时间设置为)? java.time.format.DateTimeParseException:无法分析文本“2007-07-21+00:00”:无法从TemporalAccessor获取OffsetDateTime:{offsetseconds=0},ISO解析为类型java.time.format.Parsed的2007-07-21