Java扫描日志文件并获取时间信息,然后计算耗时

标签 java java.util.scanner

我有一个 txt 文件,其中包含如下行:

0    Apr 12 08:42:44.000009 (+0.000009) *** START ***

我想获取的信息是:

Apr 12 08:42:44

我当前使用的方法是使用扫描仪读取此行:

public void getTime() throws IOException {
    String time = "";
    Scanner scan = new Scanner(location);
    String firstLine = scan.nextLine();
    String[] splitString = firstLine.split("\\.");
    String[] rebootTime = splitString[0].split(" ");

    for(int i = 0; i < rebootTime.length; i++) {
        if(i != 0) {
            time = time + rebootTime[i] + " ";
        }
    }
    System.out.println(time);
}

有没有更智能的方法来获取时间信息?

获得时间后,如何将其转换为日期格式并计算持续时间?

我正在尝试将 JAVA 8 Instant 与 this method 一起使用,如何将时间值转换为Instant类型?

最佳答案

如果我理解正确,您的目标是从日志文件的每个字符串中提取重新启动时间。我认为使用扫描仪是可以的。从日志文件中提取一行后,您还可以对其使用正则表达式,如下所示:

String firstLine = scan.nextLine();
Pattern pattern = Pattern.compile("[a-zA-Z]{3}\\s\\d{2}\\s\\d{2}:\\d{2}:\\d{2}");
Matcher matcher = pattern.matcher(firstLine);

if (matcher.find()) {
    String rebootTime = matcher.group();
}

这个正则表达式并不完美,但它可以在您的线路上工作。您可以更加严格或不那么严格。

要将字符串格式化为LocalDateTime,可以使用以下方法:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
            .appendPattern("MMM dd HH:mm:ss")
            .parseDefaulting(ChronoField.YEAR, 1)
            .toFormatter();

LocalDateTime date = LocalDateTime.parse(rebootTime, formatter);

因此 parseDefaulting(ChronoField.YEAR, 1) 意味着您忽略字符串中的年份并将其设置为结果 LocalDateTime 中的 1。之后,您可以使用 LocalDateTimes 计算持续时间。

关于Java扫描日志文件并获取时间信息,然后计算耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45467628/

相关文章:

java - 如何在 Google Directory api 中设置用户管理器

java - 使用 for 循环创建多个数组

java - 使用 While 循环、使用扫描仪输入变量

java - 如何检查用户输入的字符串是否正确? ( java )

java - nextLine() 方法如何工作

java - 扫描从文件读取的行的有效方法

java - 内部类变量的可见性

java - 如果标签重复,如何将信息与 html 标签内的正则表达式匹配?

java - JasperFillManager 填充导出的文件

java - 按回车键时程序不会继续。我该如何解决这个错误?