in reply to Uptime with Win32::GetTickCount()

I just posted to http://www.perlmonks.org/?node_id=433565 (Converting POSIX format date/times to epoch seconds) a change to convert the WMIC boot time output. not sure if it would work for older systems but it works on Windows 7. requires use of the (not so great named) HTTP::Date package and a simple modification. code allows use of WMIC command to get the seconds at time of boot and time() can be used at that point to get the up time. GetTickCount was giving me a time (in ms) of 13 days up time on my system which has been up for 150+ days - the change to HTTP::Date is small and allowed me to report the correct up time.

Replies are listed 'Best First'.
Re^2: Uptime with Win32::GetTickCount()
by Anonymous Monk on Oct 21, 2014 at 15:31 UTC

    if you have wmic then here is a program to convert the wmic format boot time to seconds then redisplay it. I cloned the HTTP::Date code then chopped it down to this. also being posted on http://www.perlmonks.org/?node_id=433565

    use strict; use Time::Local; sub wmic2time (;$) { my $wmic_time_in=$_[0]; if(!defined $wmic_time_in) { $wmic_time_in=join " ",`wmic os get lastbootuptime 2>&1`; $wmic_time_in=~s/\r\n/ /g; $wmic_time_in=~s/ * / /g; } $wmic_time_in=~s/LastBootUpTime //i; # caller may have remove +d this already but just in case.... my @d = $wmic_time_in =~ /^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/x +; # year numerical month day Hour Min Sec return undef unless @d; $d[1]--; # month return eval { my $t = Time::Local::timelocal(reverse @d); $t < 0 ? undef : $t; }; } my $newtime=wmic2time; print "$newtime\n"; print scalar localtime $newtime . "\n";