2006-06-06
VI A rather simplistic approach to setting the system time. Plain Tcl. Requires administrator privileges and works on SunOS Linux and Windows. The script downloads a web page from the nist web site and parses it to set the time. The URL is of the form: / <s for standard> or <d for daylight savings> / <offset-from-gmt>
The default (/d/-8) is correct for the pacific timezone in the US:
package require http
set url "http://www.time.gov/timezone.cgi?/d/-8"
set idx [::http::geturl $url]
set r [::http::data $idx]
::http::cleanup $idx
regsub -all {<script.*?/script>} $r {} r
regsub -all {<style.*?/style>} $r {} r
regsub -all {<[^>]*>} $r "\n" r
regsub -all {&[^;]*;} $r "\n" r
set found 0
foreach line [split $r "\n"] {
set line [string trim $line]
if {[regexp {^\d\d:\d\d:\d\d$} $line]} {
set time $line
} elseif {[regexp {.*day,\s+([A-Za-z]+\s\d+,\s+20\d\d)} $line -> t]} {
set time "$time $t"
set found 1
}
}
if {$found == 0} {
error "Could not parse out time"
}
set c [clock scan $time]
puts "Time is [clock format $c]"
switch $::tcl_platform(os) {
Linux - SunOS {
exec date [clock format $c -format %m%d%H%M%Y.%S]
}
"Windows NT" {
exec cmd /c date [clock format $c -format %m-%d-%y]
exec cmd /c time [clock format $c -format %H:%M:%S]
}
default {
error "Unknown platform"
}
}