gpt4 book ai didi

java - 比较作为文件名一部分的两个文件之间的时间

转载 作者:行者123 更新时间:2023-12-02 01:39:21 25 4
gpt4 key购买 nike

我有 2 个文件,它们的时间戳不同

command_step_output/2019/02/13/ea768d46-85bb-4833-8326-fb6be6d60a89_20190213_105228_command_step_output.csv.gz

command_step_output/2019/02/13/ea768d46-85bb-4833-8326-fb6be6d60a89_20190213_105325_command_step_output.csv.gz

它们之间的唯一区别是文件名结束之前的时间不同 105228(表示 10:52:28)与 105325(表示 10:53:25),我希望能够为了比较它们并给它一个少1分钟或多1分钟的缓冲区,在这个例子中使用这个逻辑文件的名称是相同的,我希望能够使用这个缓冲区来比较它们,我尝试了一些方法,但它没有给我解决方案。

最佳答案

java.time

计算两条路径的时间差:

    String onePath     = "command_step_output/2019/02/13/ea768d46-85bb-4833-8326-fb6be6d60a89_20190213_105228_command_step_output.csv.gz";
String anotherPath = "command_step_output/2019/02/13/ea768d46-85bb-4833-8326-fb6be6d60a89_20190213_105325_command_step_output.csv.gz";

LocalDateTime oneTime = extractDateTime(onePath);
LocalDateTime anboherTime = extractDateTime(anotherPath);

Duration diff = Duration.between(oneTime, anboherTime);
diff = diff.abs();

最后一行中对 abs 的调用会将任何负差值转换为正差值,确保缓冲区少 1 分钟又多 1 分钟。 extractDateTime 位于此答案的底部。要知道差异是否小于一分钟,有不同的方法,我想向您展示几个选项。首先是简单的:

    if (diff.toMinutes() < 1) {
System.out.println("Within the window: " + diff);
}

Within the window: PT57S

我已经打印了消息中的差异,看起来有点搞笑。格式为ISO 8601。读作“一段57秒的时间”。

上述方法的缺点是它只能工作整分钟。如果有一天您想将缓冲区更改为 45 秒或 1 分 30 秒,该怎么办?以下是更一般的内容:

    Duration buffer = Duration.ofMinutes(1);
if (diff.compareTo(buffer) < 0) {
System.out.println("Within the window: " + diff);
}

我希望 Duration 有一个 isShorterThan 方法,但它没有。如果您发现使用 compareTo 的代码难以阅读,那么您并不孤单。另一种方法是减去并查看结果是否为负:

    if (diff.minus(buffer).isNegative()) {
System.out.println("Within the window: " + diff);
}

我答应你辅助方法的代码:

private static LocalDateTime extractDateTime(String path) {
String dateTimeString = path.replaceFirst("^.*/[0-9a-f-]+_(\\d+_\\d+)_command_step_output\\.csv\\.gz$", "$1");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuuMMdd_HHmmss");
return LocalDateTime.parse(dateTimeString, formatter);
}

我使用 replaceFirst 和正则表达式来提取 20190213_105228 部分。然后将其解析为 LocalDateTime 对象。

链接

关于java - 比较作为文件名一部分的两个文件之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54668763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com