1

谁能帮我知道如何使用java api检测系统登录和注销时间?只有登录时的登录时间和系统关闭时的注销时间。如果可能的话,der 也可用于 linux 机器。

4

2 回答 2

2

看看这个:

public static long getSystemUptime() throws Exception {
long uptime = -1;
String os = System.getProperty("os.name").toLowerCase();
if (os.contains("win")) {
    Process uptimeProc = Runtime.getRuntime().exec("net stats srv");
    BufferedReader in = new BufferedReader(new InputStreamReader(uptimeProc.getInputStream()));
    String line;
    while ((line = in.readLine()) != null) {
        if (line.startsWith("Statistics since")) {
            SimpleDateFormat format = new SimpleDateFormat("'Statistics since' MM/dd/yyyy hh:mm:ss a");
            Date boottime = format.parse(line);
            uptime = System.currentTimeMillis() - boottime.getTime();
            break;
        }
    }
} else if (os.contains("mac") || os.contains("nix") || os.contains("nux") || os.contains("aix")) {
    Process uptimeProc = Runtime.getRuntime().exec("uptime");
    BufferedReader in = new BufferedReader(new InputStreamReader(uptimeProc.getInputStream()));
    String line = in.readLine();
    if (line != null) {
        Pattern parse = Pattern.compile("((\\d+) days,)? (\\d+):(\\d+)");
        Matcher matcher = parse.matcher(line);
        if (matcher.find()) {
            String _days = matcher.group(2);
            String _hours = matcher.group(3);
            String _minutes = matcher.group(4);
            int days = _days != null ? Integer.parseInt(_days) : 0;
            int hours = _hours != null ? Integer.parseInt(_hours) : 0;
            int minutes = _minutes != null ? Integer.parseInt(_minutes) : 0;
            uptime = (minutes * 60000) + (hours * 60000 * 60) + (days * 6000 * 60 * 24);
        }
    }
}
return uptime;
}

这将为您提供正常运行时间,因此请从当前时间中减去它。

于 2013-04-24T09:39:34.000 回答
0

如果系统是指操作系统,那么我建议您为此使用脚本,尤其是对于 linux。例如,您可以使用文件 ~/.bashrc 来检测登录。

于 2013-04-24T09:38:23.510 回答