在java中是否保留上周的子字符串日期?

snvhrwxg  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(268)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

上个月关门了。
改进这个问题
假设我们在一个列表中有一堆文件,它们的名称由文件+日期和时间格式(dd\u mm\u yyyy\u hour\u minute\u second)组成。它看起来像这样:

[
file_03_12_20_23_11_42
file_29_11_20_23_11_42
file_28_11_20_23_31_41
file_11_11_19_23_31_12
file_23_06_19_23_11_35
file_02_12_20_23_50_31
file_30_11_20_23_41_12
...
]

有没有一种方法可以过滤掉这个列表,把从当前日期算起的最后一周内的任何事情都保留下来?
我知道如何用date类或calender类获取当前日期,但是我不知道如何保存这些文件的最后7天。这是类型file的列表,但使用file.tostring()时,文件名将是字符串。

c9qzyr3d

c9qzyr3d1#

假设您有一个文件目录,如下所示:

Users/Shash/Desktop/Files
 ├── file_02_12_20_23_50_31
 ├── file_03_12_20_23_11_42
 ├── file_11_11_19_23_31_12
 ├── file_23_06_19_23_11_35
 ├── file_28_11_20_23_31_41
 ├── file_29_11_20_23_11_42
 └── file_30_11_20_23_41_12

你可以用parse LocalDate ,并筛选 LocalDate 对应一周前:

import java.io.File;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Objects;

class Main {
    public static void main(String[] args) {
        File fileDirectory = new File("/Users/Shash/Desktop/Files");
        List<File> filesWithDates =
                Arrays.asList(Objects.requireNonNull(fileDirectory.listFiles()));

        System.out.println("Before filtering:");
        filesWithDates.forEach(f -> System.out.println(f.getName()));

        List<File> filesWithDatesUpToWeekOld = filterOldFiles(filesWithDates);

        System.out.println("After filtering:");
        filesWithDatesUpToWeekOld.forEach(f -> System.out.println(f.getName()));
    }

    private static List<File> filterOldFiles(List<File> filesWithDates) {
        List<File> filteredFiles = new ArrayList<>();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
                "'file'_dd_MM_yy_HH_mm_ss", Locale.ENGLISH);
        LocalDate oneWeekAgo = LocalDate.now().minus(1, ChronoUnit.WEEKS);
        for (File fileWithDate : filesWithDates) {
            LocalDate dateTime = LocalDate.parse(fileWithDate.getName(), formatter);
            if (!dateTime.isBefore(oneWeekAgo)) {
                filteredFiles.add(fileWithDate);
            }
        }
        return filteredFiles;
    }
}

输出:

Before filtering:
file_30_11_20_23_41_12
file_03_12_20_23_11_42
file_23_06_19_23_11_35
file_28_11_20_23_31_41
file_11_11_19_23_31_12
file_29_11_20_23_11_42
file_02_12_20_23_50_31
After filtering:
file_30_11_20_23_41_12
file_03_12_20_23_11_42
file_28_11_20_23_31_41
file_29_11_20_23_11_42
file_02_12_20_23_50_31

相关问题