我有一个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/