想要java代码来计算各种日志之间的时间

时间:2011-06-22 12:22:56

标签: java

[Tue Jun 21 16:09:27.530 2011] request_suspend_state: sleep (0->3) at 263958221465 (2000-01-01 00:04:22.124816866 UTC)
[Tue Jun 21 16:09:27.530 2011] WARNING omaplfb (OMAPLFBPresentSync 235): Unable to sync with display 1!
[Tue Jun 21 16:09:27.530 2011] stop_drawing_early_suspend: timeout waiting for userspace to stop drawing
[Tue Jun 21 16:09:27.530 2011] WARNING omaplfb (OMAPLFBPresentSync 235): Unable to sync with display 1!
[Tue Jun 21 16:09:27.530 2011] PM: Syncing filesystems ... done.
[Tue Jun 21 16:09:27.545 2011] PM: Preparing system for mem sleep
[Tue Jun 21 16:09:27.545 2011] Freezing user space processes ... (elapsed 0.02 seconds) done.

这是一个包含日期,时间的日志文件。 我想计算任意两行之间的时间。 请帮助我。

4 个答案:

答案 0 :(得分:2)

  1. 阅读每个条目及其时间戳。
  2. 将时间戳String解析为java.util.Date
  3. 使用java.util.CalendarJODA计算时差。

答案 1 :(得分:1)

我会写一个例程,它接受一个字符串列表,解析它们的日期,并返回一个结果日期列表:

public static List<Date> parseDates(List<String> ss) throws ParseException {
  DateFormat format = new SimpleDateFormat("[EEE MMM dd HH:mm:ss.SSS yyyy]");
  List<Date> dates = new ArrayList<Date>();
  for (int i=0; i<ss.size(); i++) {
    dates.add(format.parse(ss.get(i)));
  }
  return dates;
}

然后你可以计算任意两个编号行之间的毫秒数,如下所示:

List<Date> dates = parseDates(myLogLines);
long t0 = dates.get(0).getTime(); // Time in millis from line 0.
long t1 = dates.get(1).getTime(); // Time in millis from line 1.
long diff = (t1 - t0); // Elapsed time in milliseconds between lines 0 and 1.

答案 2 :(得分:0)

您可以将两次提取为String,使用SimpleDateFormat将它们转换为Date,然后转换为long并比较差异。

您使用的是Windows系统吗?您的准确度可能约为15毫秒。

答案 3 :(得分:0)

您需要解析日志并将令牌保存在列表或地图中(您可以使用StringTokenizer)。然后你只需要使用SimpleDateFormat

在日期上进行一些操作