提问人:Abhinash Jha 提问时间:2/3/2023 最后编辑:MC EmperorAbhinash Jha 更新时间:4/5/2023 访问量:131
LocalDateTime(或任何其他合适的类)和 time 作为可选参数
LocalDateTime (or any other suitable class) with time as optional paramter
问:
我正在尝试解析可能包含时间或不包含时间的传入字符串。以下两个日期都应被接受
"2022-03-03" and "2022-03-03 15:10:05".
我知道的 DateTimeFormatter 在任何一种情况下都会失败。这是我得到的一个答案,但我不知道时间部分是否可以在这里成为可选的。
ISO_DATE_TIME.format() 转换为具有可选偏移量的 LocalDateTime
这个想法是,如果时间部分不存在,我应该将其设置为一天的结束,所以时间部分应该是 23:59:59。
任何帮助都是值得赞赏的。谢谢!
答:
3赞
MC Emperor
2/3/2023
#1
好吧,您可以使用 a 来指定缺失字段的默认值:DateTimeFormatterBuilder
private static LocalDateTime parse(String str) {
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("uuuu-MM-dd[ HH:mm:ss]")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 23)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 59)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 59)
.toFormatter();
return LocalDateTime.parse(str, formatter);
}
该模式指定它将尝试解析的模式。请注意,方括号 () 是可选部分。它们之间的一切都将被完全消耗,或者完全丢弃。[]
使用 您可以指定缺少字段时的默认值。在您的例子中,如果用户只提供日期,则缺少一天中的小时、每小时的分钟和分钟的秒字段,这就是需要为它们提供默认值的原因。parseDefaulting
例
System.out.println(parse("2022-03-03"));
System.out.println(parse("2022-03-03 15:10:05"));
System.out.println(parse("2025"));
输出以下内容:
2022-03-03T23:59:59
2022-03-03T15:10:05
Exception in thread "main" java.time.format.DateTimeParseException: Text '2025' could not be parsed at index 4
评论
1赞
John Williams
2/3/2023
今天学到了一些东西,谢谢。
评论
LocalDateTime
LocalDate
LocalDateTime
LocalDate
LocalDateTime