我有一个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类型?

最佳答案

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

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

10-11 22:22
查看更多