Index: openacs-4/packages/acs-lang/www/admin/set-system-timezone.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-lang/www/admin/set-system-timezone.tcl,v
diff -u -N -r1.2 -r1.3
--- openacs-4/packages/acs-lang/www/admin/set-system-timezone.tcl 13 Feb 2003 14:26:50 -0000 1.2
+++ openacs-4/packages/acs-lang/www/admin/set-system-timezone.tcl 8 Aug 2003 12:21:28 -0000 1.3
@@ -35,22 +35,24 @@
foreach entry [lc_list_all_timezones] {
set tz [lindex $entry 0]
- multirow append timezones $entry $tz [string equal $tz $system_timezone]
+ multirow append timezones $entry $tz [string equal $tz $system_timezone]>
}
# Try to get the correct UTC time from www.timeanddate.com
+
if { [catch {
+
set time_and_date_page [util_httpget "http://www.timeanddate.com/worldclock/"]
regexp {Current UTC \(or GMT\)-time used: ([^<]*)} $time_and_date_page match utc_from_page
# UTC in format:
# Wednesday, November 20, 2002, at 2:49:07 PM
+ # Wednesday, August 6, 2003, at 12:11:48
+ regexp {^([^,]*), *([^ ]*) *([0-9]*), *([0-9]*), at (.*)$} $utc_from_page match weekday month day year time
- regexp {^([^,]*), ([^ ]*) ([0-9]*), ([0-9]*), at (.*)$} $utc_from_page match weekday month day year time
-
set utc_epoch [clock scan "${month} ${day}, ${year} ${time}"]
-
+
set utc_ansi [clock format $utc_epoch -format "%Y-%m-%d %T"]
} errmsg] } {
@@ -60,3 +62,43 @@
set utc_ansi {Couldn't get time from timeanddate.com, sorry.}
}
+set correct_p {}
+
+if { [info exists utc_epoch] } {
+ with_catch errmsg {
+ set sysdate_utc_epoch [clock scan $sysdate_utc]
+ set delta_hours [expr round(($sysdate_utc_epoch - $utc_epoch)*4.0 / (60*60)) / 4.0]
+ set recommended_offset [expr $system_utc_offset + $delta_hours]
+
+ if { $delta_hours == 0 } {
+ set correct_p 1
+ } else {
+ set correct_p 0
+ }
+
+ set try_offsets [list]
+ foreach offset [list $recommended_offset [expr $recommended_offset -24]] {
+ lappend try_offsets [expr int($offset*60*60)]
+ }
+
+ set query "
+ select tz.tz, tz.gmt_offset
+ from timezones tz,
+ timezone_rules tzr
+ where tzr.gmt_offset in ([join $try_offsets ", "])
+ and tzr.tz_id = tz.tz_id
+ and to_date('$utc_ansi', 'YYYY-MM-DD HH24:MI:SS') between tzr.utc_start and tzr.utc_end
+ order by tz
+ "
+
+ db_multirow -extend { value label selected_p } suggested_timezones select_suggested_timezones $query {
+ set selected_p [string equal $tz $system_timezone]
+ set value $tz
+ set label "$tz $gmt_offset"
+ }
+ } {
+ # Didn't work, too bad
+ global errorInfo
+ error $errmsg $errorInfo
+ }
+}