Java 根据输入字符串分析LocalDateTime
客户端可以以格式发送Java 根据输入字符串分析LocalDateTime,java,java-8,java-time,Java,Java 8,Java Time,客户端可以以格式发送字符串 “yyyy-MM-dd HH:MM:ss”或“yyy-MM-dd”如果他向我发送了完整的格式,我需要解析完整的LocalDateTime,或者使用默认的Time部分“23:59:59” 目前我已经编写了这个解决方案,但它似乎不好,因为我使用异常来控制业务逻辑 public class LocalDateTimeConverter implements IStringConverter<LocalDateTime> { private static
字符串
“yyyy-MM-dd HH:MM:ss”
或“yyy-MM-dd”
如果他向我发送了完整的格式,我需要解析完整的LocalDateTime
,或者使用默认的Time
部分“23:59:59”
目前我已经编写了这个解决方案,但它似乎不好,因为我使用异常来控制业务逻辑
public class LocalDateTimeConverter implements IStringConverter<LocalDateTime> {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public LocalDateTime convert(String value) {
LocalDateTime localDateTime;
try {
localDateTime = LocalDateTime.parse(value, DATE_TIME_FORMATTER);
} catch (DateTimeParseException ex) {
localDateTime = LocalDateTime.of(LocalDate.parse(value), LocalTime.of(23, 59, 59));
}
return localDateTime;
}
}
公共类LocalDateTimeConverter实现IStringConverter{
私有静态最终日期timeformatter DATE\u TIME\u FORMATTER=DateTimeFormatter.of模式(“yyyy-MM-dd HH:MM:ss”);
@凌驾
公共LocalDateTime转换(字符串值){
LocalDateTime LocalDateTime;
试一试{
localDateTime=localDateTime.parse(值,日期\时间\格式化程序);
}捕获(DateTimeParseException-ex){
localDateTime=localDateTime.of(LocalDate.parse(value),LocalTime.of(23,59,59));
}
返回localDateTime;
}
}
关于如何更清晰地实现它,您有什么建议吗?检查输入字符串的长度,以确定必须应用哪种格式,如下所示:
public LocalDateTime convert(String value) {
value = value.trim();
boolean isShort = value.length() <= 10;
DateTimeFormatter DATE_TIME_FORMATTER;
if (isShort) {
DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
} else {
DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
}
LocalDateTime localDateTime;
try {
localDateTime = LocalDateTime.parse(value, DATE_TIME_FORMATTER);
if (isShort) {
localDateTime = localDateTime.with(LocalTime.of(23, 59, 59));
}
} catch (DateTimeParseException ex) {
localDateTime = null;
}
return localDateTime;
}
public LocalDateTime转换(字符串值){
value=value.trim();
boolean isShort=value.length()我从来没有使用过parseDefaulting
,但快速尝试一下似乎是可行的
private static final DateTimeFormatter DATE_TIME_FORMATTER = new DateTimeFormatterBuilder()
.appendValue(ChronoField.YEAR_OF_ERA, 4, 4, SignStyle.NEVER)
.appendLiteral('-')
.appendValue(ChronoField.MONTH_OF_YEAR, 2, 2, SignStyle.NEVER)
.appendLiteral('-')
.appendValue(ChronoField.DAY_OF_MONTH, 2, 2, SignStyle.NEVER)
.optionalStart()
.appendLiteral(' ')
.appendValue(ChronoField.HOUR_OF_DAY, 2)
.appendLiteral(':')
.appendValue(ChronoField.MINUTE_OF_HOUR, 2)
.appendLiteral(':')
.appendValue(ChronoField.SECOND_OF_MINUTE, 2)
.optionalEnd()
.parseDefaulting(ChronoField.HOUR_OF_DAY, 23)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 59)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 59)
.toFormatter();
LocalDateTime.parse("2000-01-01 01:02:03", DATE_TIME_FORMATTER) // 2000-01-01T01:02:03
LocalDateTime.parse("2000-01-01", DATE_TIME_FORMATTER) // 2000-01-01T23:59:59
关闭的副本,但不回答“默认时间”部分。