On 2024-01-02 04:29, Derick Rethans via tz wrote:
Hi, I have just updated the tzdb for PHP, and one of our tests started failing, and it turned out due to an unexpected data change: Previously, the following transitions existed: … 1994-03-27 01:00:00 UT ( 764730000) = 1 [ 3600 1 4 'BST' (0,0)] 1994-10-23 01:00:00 UT ( 782874000) = 2 [ 0 0 8 'GMT' (0,0)] 1995-03-26 01:00:00 UT ( 796179600) = 1 [ 3600 1 4 'BST' (0,0)] 1995-10-22 01:00:00 UT ( 814323600) = 2 [ 0 0 8 'GMT' (0,0)] 1996-03-31 01:00:00 UT ( 828234000) = 1 [ 3600 1 4 'BST' (0,0)] POSIX string: GMT0BST,M3.5.0/1,M10.5.0 std: 2 [ 0 0 8 'GMT' (0,0)] dst: 1 [ 3600 1 4 'BST' (0,0)] But now, they include an extra one for Jan 1st, 1996, with the March 31st one now not being the last one: … 1994-03-27 01:00:00 UT ( 764730000) = 1 [ 3600 1 4 'BST' (0,0)] 1994-10-23 01:00:00 UT ( 782874000) = 2 [ 0 0 8 'GMT' (0,0)] 1995-03-26 01:00:00 UT ( 796179600) = 1 [ 3600 1 4 'BST' (0,0)] 1995-10-22 01:00:00 UT ( 814323600) = 2 [ 0 0 8 'GMT' (0,0)] 1996-01-01 00:00:00 UT ( 820454400) = 2 [ 0 0 8 'GMT' (0,0)] POSIX string: GMT0BST,M3.5.0/1,M10.5.0 std: 2 [ 0 0 8 'GMT' (0,0)] dst: 1 [ 3600 1 4 'BST' (0,0)] I couldn't find anywhere in tzfile.5 or theory.html whether the last generated transition must match a transition as specified with the POSIX string (as it did with 2023c and earlier), but I vaguely remember having read such a thing when I implemented the POSIX string parsing logic. As far as I know so-far, the only effect it has on PHP users is that they will now see an extra transition when they enumerate them (the 1996-01-01 is inserted). I think I am mostly flagging this up because this was an unexpected change. Check your installed data or paths and conversion code! There was a leap second at that time, and regularly during the 1990s, so you seem to be using right/Europe/London:
$ zdump -Vc1994,1998 right/Europe/London right/Europe/London Sun Mar 27 01:00:17 1994 UT = Sun Mar 27 00:59:59 1994 GMT isdst=0 gmtoff=0 right/Europe/London Sun Mar 27 01:00:18 1994 UT = Sun Mar 27 02:00:00 1994 BST isdst=1 gmtoff=3600 right/Europe/London Fri Jul 1 00:00:18 1994 UT = Fri Jul 1 00:59:60 1994 BST isdst=1 gmtoff=3600 right/Europe/London Fri Jul 1 00:00:19 1994 UT = Fri Jul 1 01:00:00 1994 BST isdst=1 gmtoff=3600 right/Europe/London Sun Oct 23 01:00:18 1994 UT = Sun Oct 23 01:59:59 1994 BST isdst=1 gmtoff=3600 right/Europe/London Sun Oct 23 01:00:19 1994 UT = Sun Oct 23 01:00:00 1994 GMT isdst=0 gmtoff=0 right/Europe/London Sun Mar 26 01:00:18 1995 UT = Sun Mar 26 00:59:59 1995 GMT isdst=0 gmtoff=0 right/Europe/London Sun Mar 26 01:00:19 1995 UT = Sun Mar 26 02:00:00 1995 BST isdst=1 gmtoff=3600 right/Europe/London Sun Oct 22 01:00:18 1995 UT = Sun Oct 22 01:59:59 1995 BST isdst=1 gmtoff=3600 right/Europe/London Sun Oct 22 01:00:19 1995 UT = Sun Oct 22 01:00:00 1995 GMT isdst=0 gmtoff=0 right/Europe/London Mon Jan 1 00:00:19 1996 UT = Sun Dec 31 23:59:60 1995 GMT isdst=0 gmtoff=0 right/Europe/London Mon Jan 1 00:00:20 1996 UT = Mon Jan 1 00:00:00 1996 GMT isdst=0 gmtoff=0 right/Europe/London Sun Mar 31 01:00:19 1996 UT = Sun Mar 31 00:59:59 1996 GMT isdst=0 gmtoff=0 right/Europe/London Sun Mar 31 01:00:20 1996 UT = Sun Mar 31 02:00:00 1996 BST isdst=1 gmtoff=3600 right/Europe/London Sun Oct 27 01:00:19 1996 UT = Sun Oct 27 01:59:59 1996 BST isdst=1 gmtoff=3600 right/Europe/London Sun Oct 27 01:00:20 1996 UT = Sun Oct 27 01:00:00 1996 GMT isdst=0 gmtoff=0 right/Europe/London Sun Mar 30 01:00:19 1997 UT = Sun Mar 30 00:59:59 1997 GMT isdst=0 gmtoff=0 right/Europe/London Sun Mar 30 01:00:20 1997 UT = Sun Mar 30 02:00:00 1997 BST isdst=1 gmtoff=3600 right/Europe/London Tue Jul 1 00:00:20 1997 UT = Tue Jul 1 00:59:60 1997 BST isdst=1 gmtoff=3600 right/Europe/London Tue Jul 1 00:00:21 1997 UT = Tue Jul 1 01:00:00 1997 BST isdst=1 gmtoff=3600 right/Europe/London Sun Oct 26 01:00:20 1997 UT = Sun Oct 26 01:59:59 1997 BST isdst=1 gmtoff=3600 right/Europe/London Sun Oct 26 01:00:21 1997 UT = Sun Oct 26 01:00:00 1997 GMT isdst=0 gmtoff=0 but there is no change visible with zdump on default or POSIX 2023d: $ zdump -Vc1994,1998 Europe/London zdump -Vc1997,2025 -Vc1994,1998 Europe/London Europe/London Sun Mar 27 00:59:59 1994 UT = Sun Mar 27 00:59:59 1994 GMT isdst=0 gmtoff=0 Europe/London Sun Mar 27 01:00:00 1994 UT = Sun Mar 27 02:00:00 1994 BST isdst=1 gmtoff=3600 Europe/London Sun Oct 23 00:59:59 1994 UT = Sun Oct 23 01:59:59 1994 BST isdst=1 gmtoff=3600 Europe/London Sun Oct 23 01:00:00 1994 UT = Sun Oct 23 01:00:00 1994 GMT isdst=0 gmtoff=0 Europe/London Sun Mar 26 00:59:59 1995 UT = Sun Mar 26 00:59:59 1995 GMT isdst=0 gmtoff=0 Europe/London Sun Mar 26 01:00:00 1995 UT = Sun Mar 26 02:00:00 1995 BST isdst=1 gmtoff=3600 Europe/London Sun Oct 22 00:59:59 1995 UT = Sun Oct 22 01:59:59 1995 BST isdst=1 gmtoff=3600 Europe/London Sun Oct 22 01:00:00 1995 UT = Sun Oct 22 01:00:00 1995 GMT isdst=0 gmtoff=0 Europe/London Sun Mar 31 00:59:59 1996 UT = Sun Mar 31 00:59:59 1996 GMT isdst=0 gmtoff=0 Europe/London Sun Mar 31 01:00:00 1996 UT = Sun Mar 31 02:00:00 1996 BST isdst=1 gmtoff=3600 Europe/London Sun Oct 27 00:59:59 1996 UT = Sun Oct 27 01:59:59 1996 BST isdst=1 gmtoff=3600 Europe/London Sun Oct 27 01:00:00 1996 UT = Sun Oct 27 01:00:00 1996 GMT isdst=0 gmtoff=0 Europe/London Sun Mar 30 00:59:59 1997 UT = Sun Mar 30 00:59:59 1997 GMT isdst=0 gmtoff=0 Europe/London Sun Mar 30 01:00:00 1997 UT = Sun Mar 30 02:00:00 1997 BST isdst=1 gmtoff=3600 Europe/London Sun Oct 26 00:59:59 1997 UT = Sun Oct 26 01:59:59 1997 BST isdst=1 gmtoff=3600 Europe/London Sun Oct 26 01:00:00 1997 UT = Sun Oct 26 01:00:00 1997 GMT isdst=0 gmtoff=0 -- Take care. Thanks, Brian Inglis Calgary, Alberta, Canada La perfection est atteinte Perfection is achieved non pas lorsqu'il n'y a plus rien à ajouter not when there is no more to add mais lorsqu'il n'y a plus rien à retirer but when there is no more to cut -- Antoine de Saint-Exupéry