You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何从含时间戳的目录列表中筛选最新目录

筛选时间戳最新的完整目录名

你的代码存在两个核心问题:

  • 使用LocalDate解析目录名,会丢失小时和分钟的信息(目录名格式包含HH.mm);
  • 最终只返回了日期对象,而非原始的完整目录名。

修正方案

改用LocalDateTime处理包含时分的时间戳,同时直接在流中比较目录名对应的时间对象,最终返回原始目录字符串:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Comparator;
import java.util.NoSuchElementException;
import java.util.List;

public class LatestFolderFinder {
    public static void main(String[] args) {
        List<String> inputs = List.of("02-13-2025.20.38", "02-13-2024.20.30", "02-12-2023.20.20", "02-11-2024.20.38");
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy.HH.mm");

        String latestFolder = inputs.stream()
                // 基于目录名解析出的LocalDateTime进行比较
                .max(Comparator.comparing(folderName -> LocalDateTime.parse(folderName, formatter)))
                // 处理空列表的情况,避免NoSuchElementException
                .orElseThrow(() -> new NoSuchElementException("No valid folders found"));

        System.out.println("LATEST FOLDER = " + latestFolder);
    }
}

代码说明

  1. LocalDateTime替代LocalDate:目录名包含HH.mm(小时和分钟),LocalDate仅存储日期部分,无法完整解析和比较时间戳;LocalDateTime可以完整处理年、月、日、时、分信息。
  2. 直接返回原始目录名:通过Comparator.comparing将目录名映射为LocalDateTime进行比较,但流操作最终返回的是原始的目录字符串,而非时间对象,因此能输出完整的目录名。
  3. 空列表处理:用orElseThrow替代get(),在没有目录时抛出明确的异常,避免运行时错误。

运行这段代码后,输出结果为:LATEST FOLDER = 02-13-2025.20.38,符合预期。

内容的提问来源于stack exchange,提问作者Aman Pasi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:12:45