Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Java中Windows用户的登录时间_Java_Windows_Userinfo - Fatal编程技术网

获取Java中Windows用户的登录时间

获取Java中Windows用户的登录时间,java,windows,userinfo,Java,Windows,Userinfo,Java中是否有方法获取当前用户登录的时间 我知道,如果在Windows终端中运行quser,它将以分钟的精度列出当前用户的一些基本信息,包括登录时间 是否有一个系统属性或一些我可以在Java中访问的东西,我可以从中获取用户的登录时间 如果有一种跨平台的方法来获取当前用户在Windows、Mac OS、Android等系统中的登录时间,则可获得额外积分。一种可能的解决方案是使用Runtime.getRuntime().exec(),如下所示: public static void main

Java中是否有方法获取当前用户登录的时间

我知道,如果在Windows终端中运行
quser
,它将以分钟的精度列出当前用户的一些基本信息,包括
登录时间

是否有一个系统属性或一些我可以在Java中访问的东西,我可以从中获取用户的登录时间


如果有一种跨平台的方法来获取当前用户在Windows、Mac OS、Android等系统中的登录时间,则可获得额外积分。

一种可能的解决方案是使用
Runtime.getRuntime().exec()
,如下所示:

   public static void main(String[] args) throws Exception {
        Process p;
        StringBuilder sb = new StringBuilder();

        p = Runtime.getRuntime().exec("quser");
        p.waitFor();

        BufferedReader reader
                = new BufferedReader(new InputStreamReader(p.getInputStream()));

        String line = "";
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        System.out.println(sb);
    }
已成功获取我的登录信息:

run:

 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
 robotlos              console             1  Active    1+18:08  3/17/2016 10:36 AM

BUILD SUCCESSFUL (total time: 0 seconds)
要确定正在使用的操作系统,可以使用
System.getProperty(“OS.name”)

要分离日期和时间,在我的例子中,因为它是
sb
的最后3个子字符串,您可以执行以下操作:

 String[] vals = sb.toString().split(" ");
 String loginTime = vals[vals.length - 3] + " " + vals[vals.length - 2] + " " + vals[vals.length - 1];
虽然这不是最好的解决方案

System.out.println(loginTime);
将打印:

3/17/2016 10:36 AM

您不能创建一个将在shell上运行
quser
的代码段吗?提供了一个如何从java执行shell命令的示例。据我所知,没有java系统属性可以检索登录时间。有一种方法可以获取当前登录的用户,但没有比这更具体的方法。你可以试试@robotlos的建议;不过,我不知道您以后如何提取该值以在程序中使用,但可能其他人会提取。您是否成功地使用本地windows datetime格式将该值解析为
Date
?@sashasalau您不确定自己在问什么。但在平台方面,这是在Windows上运行的。我的意思是返回
日期
,而不是
字符串
@SashaSalauyou哦,我不认为这有什么问题,因为我附加了
字符串
。我没有真正解析任何东西。此外,还有一个问题。除了读取windows注册表,我找不到读取计算机本地日期时间模式的解决方案。。。