我得到了从 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);
问题是我得到了
dateA
和 dateB
,而不是 a
和 b
。我尝试了各种方法,比如将
LocalDateTime
转换为 String
并找到它的长度。为此,我使用了两种方法。date.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME).length();
date.toString().length();
但第一种方法为
dateA
和 dateB
提供长度 19 而第二种方法为 dateA
和 dateB
提供长度16。我找不到任何方法来区分
dateA
和 dateB
。 最佳答案
正如其他人已经说过的, 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/