gpt4 book ai didi

java - DateTimeFormatterBuilder#appendText(TemporalField, Map) 解析时抛出异常

转载 作者:行者123 更新时间:2023-12-02 01:51:44 24 4
gpt4 key购买 nike

我正在尝试使用 返回的 DateTimeFormatter 来解析表示具有 IsoField.QUARTER_OF_YEARLocalDate 值的文本DateTimeFormatterBuilder#buildFormatter() 方法。

有问题的文本是“20 Oct 2018 Q2”。对于传统日历年(此处为“2018”)来说,季度值(“Q2”)无疑是不正确的。不过,我正在处理的会计年度于 6 月 30 日结束,因此日期“2018 年 10 月 20 日”将位于该会计年度的第二季度。

格式化程序是使用以下代码构建的:

TemporalQuery<LocalDate> query = LocalDate::from;
String pattern = “d MMM uuuu qqq”;
Locale locale = Locale.forLanguageTag("en-US");
TemporalField tf = IsoFields.QUARTER_OF_YEAR;
Map<Long, String> m = new Hashtable<>();
m.put(4L, “Q2”);
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern(pattern)
.appendText(tf, m)
.toFormatter(locale);
TemporalAccessor value = formatter.parse(text, query)

尝试解析会生成带有错误消息的 DateTimeParseException:“无法在索引 0 处解析文本“20 Oct 2018 Q2””

我尝试更改 parseCaseInsensitive() ... appendText() 方法的调用顺序。尽管在其中一种变体中指定的索引为 14,但仍会引发异常。

问题的可能原因:DateTimeFormatterBuilder#appendText(TemporalField, Map) 方法可能仅适用于格式操作,而不适用于此处的解析。

预先感谢您的任何想法或帮助!

最佳答案

您尝试解析季度年部分两次 - 每个模式指令一次(使用字母 q),每个构建器指令一次(使用方法appendText)。解决方案:删除模式中的 qqq 部分并使用“d MMM uuuu”

但是一些评论:

  • 根本不支持会计年度。
  • 使用更好的 HashMap 而不是过时的 Hashtable
  • 示例代码使用特殊引号而不是标准字符 (")。
  • 解析后的值相当于 LocalDate.of(2018, 10, 20)(并且没有有关您的特殊区域的信息)。

关于java - DateTimeFormatterBuilder#appendText(TemporalField, Map<Long,String>) 解析时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52904624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com