gpt4 book ai didi

java - 如果删除空格,DateTimeFormatter 解析带有可选时间部分的字符串将失败

转载 作者:搜寻专家 更新时间:2023-11-01 02:57:43 26 4
gpt4 key购买 nike

正在关注 my other question on how to parse date-only strings as LocalDateTime ,在尝试使用模式 yyyyMMdd[HHmmss] 解析字符串 20120301122133 时出现错误。奇怪的是,使用模式 yyyyMMdd[HHmmss] 解析 20120301 122133 效果很好。

所以这段代码工作正常

LocalDateTime.parse(
"19940513 230000",
new DateTimeFormatterBuilder()
.appendPattern("yyyyMMdd[ HHmmss]")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.toFormatter()
)

这个失败了

LocalDateTime.parse(
"19940513230000",
new DateTimeFormatterBuilder()
.appendPattern("yyyyMMdd[HHmmss]")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.toFormatter()
)

我应该如何使用 java 8 时间 API 解析 yyyyMMdd[HHmmss] 格式的字符串,即带有可选时间部分的 yyyyMMddHHmmss 格式?

解析模式是一个可配置的选项,因此只在运行时才知道。所以我不能用硬编码的 DateTimeFormatterBuilder 调用替换字符串模式。

最佳答案

    System.out.println(LocalDateTime.parse(
"19940513230000",
new DateTimeFormatterBuilder()
.appendPattern("[uuuuMMddHHmmss][uuuuMMdd]")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.toFormatter()
));

这打印:

1994-05-13T23:00

如果相反,我尝试解析仅包含日期的字符串,"19940513",我会得到

1994-05-13T00:00

它也适用于 yyyy 而不是 uuuu。假设你所有的年份都在这个时代(第 1 年或更晚),你使用哪个时代没有任何区别。通常 uuuu 也会接受负数年份,0 表示公元前 1 年,-1 表示公元前 2 年,依此类推。

关于java - 如果删除空格,DateTimeFormatter 解析带有可选时间部分的字符串将失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49358893/

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