2016-03-31 7 views
2

Есть ли способ в Java, чтобы получить время, когда текущий пользователь вошел в систему?Получить время для пользователя Windows в Java

Я знаю, что если вы запустите quser в терминале Windows, он перечислит базовую информацию о текущих пользователях, включая LOGON TIME, с минимальной точностью.

Есть ли свойство системы или что-то, что я могу получить в Java, от которого я могу получить время входа пользователя?

Бонусные баллы, если есть кросс-платформенный способ получить текущего пользователя время входа в Windows, Mac OS, Android и т.д.

+0

Не можете ли вы создать фрагмент кода, который будет запускать 'quser' на оболочке? [Эта ссылка] (http://www.mkyong.com/java/how-to-execute-shell-command-from-java/) содержит пример того, как выполнить команду оболочки из java. – robotlos

+0

Насколько я знаю, нет свойства Java, которое может получить время входа в систему. Есть тот, который может получить зарегистрированного пользователя, но не более конкретно. Вы можете попробовать, что предложили @robotlos; Однако я не знаю, как вы могли бы извлечь эту ценность для использования в своей программе, но, возможно, кто-то другой. – NAMS

ответ

2

может быть Возможное решение с использованием 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")

Чтобы выделить дату и время, в моем случае, так как это последние 3 подстрок sb вы могли бы сделать что-то вроде:

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 
+0

Вам удалось разобрать это значение на 'Date', используя формат даты и времени в Windows? –

+0

@SashaSalauyou не уверен, что вы просите. Но в отношении платформ это было запущено в Windows. – robotlos

+0

Я хотел бы вернуть 'Date', а не' String'. –