如何确定计算机已启动多长时间(以毫秒为单位)?在Java中获取系统正常运行时间
回答
我真的不能想到一个非操作系统依赖的方式来做到这一点。 一个选项将使用ManagementFactory.getRuntimeMXBean().getUptime();
这将返回您的JVM正常运行时间,所以不是你正在寻找的东西,而是朝着正确的方向迈出的一步。
你究竟想用数据来完成什么?
in结果返回哪个数据类型?我正在寻找系统登录时间在我的应用程序中使用,以提醒用户系统在特定时间内未关机。如果有的话,请更新代码。谢谢 – JavDev 2016-06-04 07:38:54
@JavDev长时间返回正常运行时间的毫秒数 – 2016-06-08 09:44:43
在Windows中,您可以执行net stats srv
命令,而在Unix中,可以执行uptime
命令。必须解析每个输出以获取正常运行时间。该方法通过检测用户的操作系统自动执行必要的命令。
请注意,这两个操作都不会以毫秒为单位返回正常运行时间。
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;
}
Windows系统可以通过查询windows WMI
要运行下面的代码获得uptime
到毫秒级精确度,你需要下载Jawin库并添加jawin.dll
到Eclipse项目的根
public static void main(String[] args) throws COMException {
String computerName = "";
String userName = "";
String password = "";
String namespace = "root/cimv2";
String queryProcessor = "SELECT * FROM Win32_OperatingSystem";
DispatchPtr dispatcher = null;
try {
ISWbemLocator locator = new ISWbemLocator(
"WbemScripting.SWbemLocator");
ISWbemServices wbemServices = locator.ConnectServer(computerName,
namespace, userName, password, "", "", 0, dispatcher);
ISWbemObjectSet wbemObjectSet = wbemServices.ExecQuery(
queryProcessor, "WQL", 0, null);
DispatchPtr[] results = new DispatchPtr[wbemObjectSet.getCount()];
IUnknown unknown = wbemObjectSet.get_NewEnum();
IEnumVariant enumVariant = (IEnumVariant) unknown
.queryInterface(IEnumVariant.class);
enumVariant.Next(wbemObjectSet.getCount(), results);
for (int i = 0; i < results.length; i++) {
ISWbemObject wbemObject = (ISWbemObject) results[i]
.queryInterface(ISWbemObject.class);
System.out.println("Uptime: "
+ wbemObject.get("LastBootUpTime"));
}
} catch (COMException e) {
e.printStackTrace();
}
- 1. 更改Linux时间来欺骗系统正常运行时间
- 2. 最快的方式获得系统正常运行时间在Python在Linux中
- 3. 如何在过去24小时内获得系统正常运行时间
- 4. 如何在Java中获得UNIX正常运行时间?
- 5. 通过VBA(访问/ Excel)中获取系统运行时间
- 6. 在iPhone中获取系统时间
- 7. 在VCS中获取系统时间
- 8. 我打电话来获得系统正常运行时间的API?
- 9. 获得程序正常运行时间
- 10. 从RTC获得正常运行时间
- 11. 在Java中获取系统最后一次启动时间
- 12. 正在运行的系统
- 13. 获取系统时间在VB.NET
- 14. 如何从系统中获取时间?
- 15. linux正常运行时间
- 16. 获取线程java的运行时间
- 17. 使用ontap API和Java可以查询哪些API以获得系统正常运行时间?
- 18. 在android中获取运行时异常
- 19. 我如何获得Linux系统的正常运行?
- 20. 如何在系统运行时获得真正的CPU频率?
- 21. 获取运行时异常
- 22. 在C++运行时获取当前操作系统
- 23. 获取时间在iOS中“运行”
- 24. 获取当前系统时间?
- 25. 获取当前系统时间
- 26. 获取当前系统日期时间
- 27. 当系统日期改变时,TimerTask获取系统日期和时间停止运行
- 28. 在不使用系统时间的情况下在java中获取UTC
- 29. 运行时立即获得系统输出(更新ProgressBar)Java
- 30. 空引用异常正在运行系统托盘消息WP8
这取决于操作系统,但你可能会想要掏出一个命令 – mre 2013-02-10 17:43:18
什么操作系统?没有外部第三方库或JNI没有办法。 – 2013-02-10 17:43:58
或者看看http://www.mkyong.com/java/how-do-get-time-in-milliseconds-in-java/ – 2013-02-10 17:46:30