[cmd,vb.net] Uptime eines Rechners bestimmen / TimeSpan formatieren
Gepostet am: Mar 30, 2011 9:49:36 AM
manuell
Im Taskmanager kann man die Uptime ablesen:
Befehlszeile
Unter Windows bis einschließlich 2003 lediglich nur mittels
> net statistics server | findstr "Statistics since"
Der Rückgabewert ist jedoch die Startzeit des Rechners und nicht die Dauer seither.
Für die Uptime als Zeitspanne
> systeminfo | findstr "System.Up.Time"
dies gibt die Zeitspanne seit dem letzten Reboot wieder
ab Windows 7 / 2008 steht unter systeminfo lediglich die Startzeit zur Verfügung.
> systeminfo | findstr "System.Boot.Time"
siehe dazu:
programmatisch
Programmatische Ansätze basieren meist auf der Enviroment.TickCount - Eigenschaft.
Einzelne Attribute, wie beispielsweise die Anzahl der Tage kann man damit in C# beispielsweise so ermitteln:
TimeSpan myTimeSpan = TimeSpan.FromMilliseconds(Environment.TickCount);
Console.WriteLine(myTimeSpan.ToString("dd"));
Will man mehrere dieser Attribute im toString verketten muss man die Trennzeichen :.\ entsprechend escapen:
siehe dazu: Benutzerdefinierte TimeSpan-Zeichenfolge.
Will man andere als die dafür vorgesehenen Platzhalter (dd,hh,mm,ss,ffff usw.) verwenden, kann man dies mittels Verkettung der String erzielen. zB:
Benötigt man die Anzahl der verstrichen Tage als Dezimalzahl, empfiehlt sich folgende Vorgehensweise:
Mathematisch gesehen passiert im Hintergrund folgendes, wie hier in VB.NET verdeutlicht.
Uptime
Public Function Uptime() As String Dim TickCount As Integer = Environment.TickCount Dim strTxt As String = "" Debug.Print(TickCount) 'Tage Dim iDays As Integer = Fix(TickCount / 1000 / 60 / 60 / 24) If iDays > 0 Then strTxt = iDays & " Tage " End If TickCount = TickCount - (iDays * 1000 * 60 * 60 * 24) 'Stunden Dim iHour As Integer = Fix(TickCount / 1000 / 60 / 60) If iHour > 0 Then strTxt = strTxt & iHour & " Stunden " End If TickCount = TickCount - (iHour * 1000 * 60 * 60) 'Minuten Dim iMinutes As Integer = Fix(TickCount / 1000 / 60) If iMinutes > 0 Then strTxt = strTxt & iMinutes & " Minuten " End If TickCount = TickCount - (iMinutes * 1000 * 60) 'Sekunden Dim iSec As Integer = Fix(TickCount / 1000) If iSec > 0 Then strTxt = strTxt & iSec & " Sekunden " End If TickCount = TickCount - (iSec * 1000) Return strTxt End Function