From 07779703b451dce687221a6608d0bef01e3afde0 Mon Sep 17 00:00:00 2001 From: nijtmans Date: Thu, 11 Dec 2008 14:01:59 +0000 Subject: Fallback to European time zone DST rules, when the timezone is between 0 and -12 [Bug 2207436]. --- ChangeLog | 7 +++++++ library/clock.tcl | 33 ++++++++++++++++++++++++++------- tests/clock.test | 24 +++++++++++++++++++++++- 3 files changed, 56 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index dd16b6e..dd1c8e2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-12-11 Jan Nijtmans + + * library/clock.tcl (ProcessPosixTimeZone): Fallback to + European time zone DST rules, when the timezone is + between 0 and -12 [Bug 2207436]. + * tests/clock.test (clock-64.[12]): Test cases for [Bug 2207436] + 2008-12-11 Donal K. Fellows TIP #234 IMPLEMENTATION diff --git a/library/clock.tcl b/library/clock.tcl index e4a21e3..bfac4e6 100644 --- a/library/clock.tcl +++ b/library/clock.tcl @@ -13,7 +13,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: clock.tcl,v 1.49 2008/11/30 19:24:00 kennykb Exp $ +# RCS: @(#) $Id: clock.tcl,v 1.50 2008/12/11 14:01:59 nijtmans Exp $ # #---------------------------------------------------------------------- @@ -3885,23 +3885,42 @@ proc ::tcl::clock::ProcessPosixTimeZone { z } { * $dstSignum }] } - # Fill in defaults for US DST rules + # Fill in defaults for European or US DST rules if { [dict get $z startDayOfYear] eq {} && [dict get $z startMonth] eq {} } { + if {($stdHours>=0) && ($stdHours<=12)} { + dict set z startWeekOfMonth 5 + if {$stdHours>1} { + dict set z startHours 2 + } else { + dict set z startHours [expr {$stdHours+1}] + } + } else { + dict set z startWeekOfMonth 2 + dict set z startHours 2 + } dict set z startMonth 3 - dict set z startWeekOfMonth 2 dict set z startDayOfWeek 0 - dict set z startHours 2 dict set z startMinutes 0 dict set z startSeconds 0 } if { [dict get $z endDayOfYear] eq {} && [dict get $z endMonth] eq {} } { - dict set z endMonth 11 - dict set z endWeekOfMonth 1 + if {($stdHours>=0) && ($stdHours<=12)} { + dict set z endMonth 10 + dict set z endWeekOfMonth 5 + if {$stdHours>1} { + dict set z endHours 3 + } else { + dict set z endHours [expr {$stdHours+2}] + } + } else { + dict set z endMonth 11 + dict set z endWeekOfMonth 1 + dict set z endHours 2 + } dict set z endDayOfWeek 0 - dict set z endHours 2 dict set z endMinutes 0 dict set z endSeconds 0 } diff --git a/tests/clock.test b/tests/clock.test index 6f2afdd..b1fcfb6 100644 --- a/tests/clock.test +++ b/tests/clock.test @@ -11,7 +11,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: clock.test,v 1.87 2008/11/30 19:24:00 kennykb Exp $ +# RCS: @(#) $Id: clock.test,v 1.88 2008/12/11 14:01:59 nijtmans Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest 2 @@ -36083,6 +36083,28 @@ test clock-52.1 {Posix timezone and conversion on last Sunday} { set result } {01:59:59 01:59:59 03:00:00 03:00:00} +test clock-52.2 {correct conversion of times in Europe} { + # [Bug 2207436] + set result {} + foreach t [list 1206838799 1206838800 1224982799 1224982800] { + lappend result [clock format $t -format %H:%M:%S \ + -timezone MET-1METDST] + lappend result [clock format $t -format %H:%M:%S \ + -timezone MET0METDST] + } + set result +} {01:59:59 00:59:59 03:00:00 02:00:00 02:59:59 01:59:59 02:00:00 01:00:00} + +test clock-52.3 {correct conversion of times in Russia} { + # [Bug 2207436] + set result {} + foreach t [list 1206799199 1206799200 1224943199 1224943200] { + lappend result [clock format $t -format %H:%M:%S \ + -timezone WST-12WSTDST] + } + set result +} {01:59:59 03:00:00 02:59:59 02:00:00} + # Regression test for Bug # 1505383 test clock-53.1 {%EC %Ey} { -- cgit v0.12