java - 如何从日期格式中获得最低的计时单位?

标签 java date-formatting java-time

看例子:

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 可以从日期时间字符串格式中获取最低计时单位?

最佳答案

您可以尝试解析预定日期并检查哪些单位具有值。我在下面写了一个简单的例子,输出:

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;
    }
    

    关于java - 如何从日期格式中获得最低的计时单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62404701/

    相关文章:

    javascript - 为什么这个日期转换需要在月份上加1?

    android - 按语言环境顺序获取工作日

    java - 如何使用DateTimeFormatter在java8中处理yyyy-mm和yyyy

    Java while 循环转换。

    java - Java 8 函数式编程中 'reduce' 函数的第三个参数的用途

    java - 如何在 Java 中格式化具有多个日期的字符串

    java - 将日期转换为不同的格式

    java - Instant.getEpochSecond 与 Instant.toEpochMilli 背后的基本原理

    JavaFX - 如何关闭 ToggleButton 的自动 setSelected(bool) 功能?

    java - java 按升序对矩阵的列进行排序