2016-03-31 5 views
2

Existe-t-il un moyen en Java de connaître l'heure à laquelle l'utilisateur actuel s'est connecté?Obtenir l'heure de connexion pour l'utilisateur Windows en Java

Je sais que si vous exécutez quser dans le terminal Windows, il listera quelques informations de base sur les utilisateurs actuels, y compris LOGON TIME, avec une précision minuscule.

Existe-t-il une propriété System ou quelque chose que je peux accéder à Java et dont je peux obtenir l'heure de connexion?

points de bonus s'il y a un moyen multi-plateforme pour obtenir le temps de connexion de l'utilisateur actuel sous Windows, Mac OS, Android, etc.

+0

Ne pouvez-vous pas créer un fragment de code qui exécutera 'quser' sur un shell? [Ce lien] (http://www.mkyong.com/java/how-to-execute-shell-command-from-java/) fournit un exemple d'exécution d'une commande shell depuis java. – robotlos

+0

Pour autant que je sache, il n'y a pas de propriété système Java qui peut récupérer une heure de connexion. Il y en a un qui peut obtenir l'utilisateur actuellement connecté, mais rien de plus spécifique que cela. Vous pourriez essayer ce que @robotlos a suggéré; Je ne sais pas comment vous pourriez extraire cette valeur pour l'utiliser dans votre programme par la suite, mais peut-être que quelqu'un d'autre le fera. – NAMS

Répondre

2

Une solution possible pourrait être en utilisant Runtime.getRuntime().exec() comme ceci:

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); 
    } 

a pu obtenir avec succès mes informations de connexion:

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) 

pour déterminer quel système d'exploitation est utilisé, vous pouvez utiliser System.getProperty("os.name")

Pour isoler la date et l'heure, dans mon cas puisque ce sont les 3 derniers sous-chaînes de sb que vous pourriez faire quelque chose comme:

String[] vals = sb.toString().split(" "); 
String loginTime = vals[vals.length - 3] + " " + vals[vals.length - 2] + " " + vals[vals.length - 1]; 

Et pendant que ce n'est pas la plus jolie solution,

System.out.println(loginTime); 

imprimera:

3/17/2016 10:36 AM 
+0

Avez-vous réussi à analyser cette valeur à 'Date' en utilisant le format local de date et heure de Windows? –

+0

@SashaSalau vous n'êtes pas sûr de ce que vous demandez. Mais en ce qui concerne les plates-formes, cela a été exécuté sur Windows. – robotlos

+0

Je voulais renvoyer 'Date', pas' String'. –