Вы можете попытаться проанализировать заданную дату и проверить, какие единицы имеют значения. Ниже я написал быстрый пример, который выводит:
yyyy-MM-dd Days
yyyy-MM-dd HH Hours
yyyy; HH; ss Seconds
yyyy; dd; MM ss n Nanos
Примечания:
- он основан на том факте, что единицы находятся в порядке возрастания в перечислении ChronoField.
- it будет работать для встроенных единиц измерения (год, месяц, день, секунда, нано), но может не дать желаемого результата для других полей, таких как, например, недельные поля или поля милли / микросекунд.
public static void main(String[] args) {
String[] formats = { "yyyy-MM-dd", "yyyy-MM-dd HH", "yyyy;HH;ss", "yyyy;dd;MM ss n" };
LocalDateTime test = LocalDateTime.of(1, 1, 1, 1, 1, 1, 1);
for (String f : formats) {
DateTimeFormatter format = DateTimeFormatter.ofPattern(f);
TemporalAccessor accessor = format.parse(test.format(format));
for (ChronoField unit : ChronoField.values()) {
if (testUnit(accessor, unit)) {
System.out.println(f + " " + unit.getBaseUnit());
break;
}
}
}
}
private static boolean testUnit(TemporalAccessor accessor, ChronoField unit) {
return accessor.isSupported(unit) && accessor.getLong(unit) == 1;
}