gpt4 book ai didi

java - 如何使用 am/pm 解析简单时间

转载 作者:行者123 更新时间:2023-11-30 07:49:59 27 4
gpt4 key购买 nike

我尝试使用 Java 8 API 进行解析,但失败得很惨。显然我缺少一些基本的东西。这是一个简单的例子:

    final DateTimeFormatter simpleFormat = new DateTimeFormatterBuilder().
appendPattern("h[h][:mm]a").
parseCaseInsensitive().
parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0).
parseDefaulting(ChronoField.AMPM_OF_DAY, 0).
toFormatter();

simpleFormat.parse("9am", LocalTime::from);
simpleFormat.parse("11am", LocalTime::from);

simpleFormat.parse("9pm", LocalTime::from);
simpleFormat.parse("11pm", LocalTime::from);

这给了我:

Exception in thread "main" java.time.format.DateTimeParseException: Text '9pm' could not be parsed at index 1

我还希望能够解析像“12:30 am”这样的时间,这就是为什么格式比上午 9 点的情况要复杂一些的原因。不区分大小写的解析是因为我的数据有上午/下午,而不是上午/下午,并且我在阅读了很多其他人在解析上午/下午时间时遇到问题后添加了默认位,所以不幸的是有点 cargo 崇拜.

我试过一些其他的格式字符串,只是为了排除它们:

"h[:mm]a"
"ha"

发生同样的错误,尽管索引位置改变了。

TIA!

最佳答案

您指定了一种格式,要求用两位数指定小时数,但您只提供了一位数。

要么使用 09am,要么将格式更改为只需要一个数字 h[:mm]a

DateTimeFormatter simpleFormat = new DateTimeFormatterBuilder().
parseCaseInsensitive().
appendPattern("h[:mm]a").
parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0).
parseDefaulting(ChronoField.AMPM_OF_DAY, 0).
toFormatter();

System.err.println(simpleFormat.parse("09AM", LocalTime::from));
System.err.println(simpleFormat.parse("09:12AM", LocalTime::from));
System.err.println(simpleFormat.parse("9AM", LocalTime::from));

输出结果

09:00
09:12
09:00

请注意 parseCaseInsensitive() 必须在 appendPattern() 之前。

关于java - 如何使用 am/pm 解析简单时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48068517/

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