我得到了从 LocalDateTime 创建的 String 对象。我想检查该原始字符串是否具有“seconds”参数。
我的两个输入是:

String a = "2016-06-22T10:01"; //not given
String b = "2016-06-22T10:01:00"; //not given

LocalDateTime dateA = LocalDateTime.parse(a, DateTimeFormatter.ISO_DATE_TIME);
LocalDateTime dateB = LocalDateTime.parse(b, DateTimeFormatter.ISO_DATE_TIME);

问题是我得到了 dateAdateB ,而不是 ab

我尝试了各种方法,比如将 LocalDateTime 转换为 String 并找到它的长度。为此,我使用了两种方法。
date.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).length();
date.toString().length();

但第一种方法为 dateAdateB 提供长度 19 而第二种方法为 dateAdateB 提供长度16。

我找不到任何方法来区分 dateAdateB

最佳答案

正如其他人已经说过的, LocalDateTime -object 总是有第二部分。另一个问题是 原始输入是否有第二部分 。仅用 Java-8-means 就可以找到答案(但它很难看,因为它基于异常控制流):

String a = "2016-06-22T10:01"; // not given
String b = "2016-06-22T10:01:00"; // given

boolean hasSecondPart;
try {
    TemporalAccessor tacc =
        DateTimeFormatter.ISO_DATE_TIME.parseUnresolved(a, new ParsePosition(0));
    tacc.get(ChronoField.SECOND_OF_MINUTE);
    hasSecondPart = true;
} catch (UnsupportedTemporalTypeException ex) {
    hasSecondPart = false;
}
System.out.println(hasSecondPart); // true for input b, false for input a

边注:

使用以下代码可以使用我的库 Time4J 进行无异常检查字符串输入是否具有第二部分:
boolean hasSecondPart =
    Iso8601Format.EXTENDED_DATE_TIME.parseRaw(a).contains(PlainTime.SECOND_OF_MINUTE);

关于time - 如何区分 LocalDateTime 中何时缺少 "second field",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44716151/

10-11 04:46