如何从日期格式中获取最低级的计时单位?

问题描述 投票:2回答:1

请看例子。

yyyy-MM-dd -> java.time.temporal.ChronoUnit.DAYS
yyyy-MM-dd HH -> java.time.temporal.ChronoUnit.HOURS
yyyy;HH;ss -> java.time.temporal.ChronoUnit.SECONDS
yyyy;dd;MM -> java.time.temporal.ChronoUnit.DAYS

是否有API可以从日期时间字符串格式中获取最低级的计时单位?

java date-formatting java-time
1个回答
4
投票

你可以尝试解析一个预定的日期并检查哪些单位有值。我已经写了一个快速的例子,输出如下。

yyyy-MM-dd Days yyyy-MM-dd HH Hours yyyy;HH;ss Seconds yyyy;dd;MM ss n Nanos

笔记。

  • 它依赖于单位在ChronoField枚举中以升序排列的事实。
  • 它适用于内置单位(年、月、日、秒、纳秒),但对于其他字段,如基于周的字段或毫微秒字段,可能无法得到你想要的结果。
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.