确定使用Java打开计算机的时间

确定使用Java打开计算机的时间,java,startup,Java,Startup,我有一个Java JAR程序,它在Windows startup上运行。它需要注册计算机打开的时间,因此它自然只需获取调用main方法的时间。很好 但是,我们安装程序的一些计算机非常(非常)慢。开机几分钟后,程序可能会启动,这并不奇怪 10-15秒的误差是可以接受的(我们最新的计算机)。但最老的两到三分钟就不行了 有没有合理的方法来确定计算机的开机时间?使用Java 我确实意识到,对于这种工作,Java是一个糟糕的选择。众所周知,Java启动并不特别快。我会问这个问题,因为程序已经用java完成

我有一个Java JAR程序,它在Windows startup上运行。它需要注册计算机打开的时间,因此它自然只需获取调用
main
方法的时间。很好

但是,我们安装程序的一些计算机非常(非常)慢。开机几分钟后,程序可能会启动,这并不奇怪

10-15秒的误差是可以接受的(我们最新的计算机)。但最老的两到三分钟就不行了

有没有合理的方法来确定计算机的开机时间?使用Java

我确实意识到,对于这种工作,Java是一个糟糕的选择。众所周知,Java启动并不特别快。我会问这个问题,因为程序已经用java完成了,但是如果没有解决方案,我将在C++版本上工作。
Windows。

您可以尝试从Java内部启动(使用
Runtime.getRuntime().exec(…)
)一个命令,该命令将为您提供准确的机器启动时间(
systeminfo
)或正常运行时间(有一个Microsoft实用程序uptime.exe)

这不是一个与java相关的问题

这是一个与操作系统相关的问题

如果您的操作系统有一个函数提供此信息,您可以调用该函数

从java调用os函数的代码是

Runtime.getRuntime().exec("command");
在linux中,获取上次引导信息的命令行命令如下:

last reboot | head -1
正如我所说,这取决于不同的操作系统

对于windows环境,可以使用以下代码:

systeminfo | findstr /C:"System Boot Time"

写短的*.bat文件怎么样?它只有一个功能——启动后,它会将实际时间写入文件

当您的Java程序被加载时,它只是首先尝试读取文件并找出计算机启动的时间


也许更好的主意是通过.bat文件启动程序。首先获取实际时间并将其保存到变量中,然后以该变量的值作为参数启动程序。当程序打开时,它将首先在main方法中接收启动时间。

在Windows上可以找到:

systeminfo | find /i "Boot Time"
(如@Robert所述,这仅适用于英文Windows安装)


只需使用
Runtime.getRuntime().exec(“命令”)
调用该命令。

您可以使用它来查找正常运行时间,然后从当前时间中减去正常运行时间以获得开始时间。这是一个Java问题,因为我想用Java来完成。在Java中从操作系统调用此类函数的方式不一定与在另一种语言中调用它的方式相同。如果你不打算回答这个问题,请发表评论,而不是回答。我编辑了答案。我说这不是一个与java相关的问题,因为java没有关于系统何时启动的信息。它是操作系统的信息。如果您的问题是如何调用一个可运行的系统函数并检索结果,那么问题就不好了。调用这样的操作系统函数是一种解决方案,但它可能是也可能不是唯一(或最好)的解决方案。询问如何调用操作系统函数而不是解决我的核心问题,等同于假设这是最佳答案(可能是也可能不是),并将放弃任何其他可能或多或少有用/方便的解决方案(例如libik的答案)。是的,正如我所说,最好把核心问题放在一边,看看我所有的选择。作为提问者,我不能在没有看到选项的情况下就假设什么是最好的解决方案。我从来没有说过他的解决方案比调用操作系统函数更好。我所说的是,在选择答案之前,最好先看看选项。要做到这一点,我必须解决核心问题,而不是陷入假设。因此,我不能只问“我如何调用操作系统函数”,因为这会使可能更好(也可能不更好)的备选答案无效。这并不是关于libik的答案——我把它作为一个例子来提到,以证明替代方法是存在的,并且必须加以考虑,不管是好是坏。这是一个非常好的想法!我会考虑。事实上,这也不会给你确切的开始时间,只是蝙蝠在被执行的时候。例如,使用“systeminfo”命令将为您提供正确的时间,而且您不必处理文件系统权限等问题。这不是系统启动的时间。如果在开始时有许多批处理文件要执行,则会受到其他批处理的强烈影响。此外,还不能保证这段时间被操作系统的其他内部线程用来执行其他活动。为什么这是被否决的?这让我很吃惊-我认为这是对这个问题最准确的答案。您可以随时向上投票:)
systeminfo | find/i“Boot Time”
仅适用于以英语作为显示语言的Windows系统。我建议使用
wmic os get lastbootuptime
,因为它使用语言和区域独立的格式作为输出格式。
wmic os get lastbootuptime
net statistics workstation